Quickest/Easiest way to use Search/Replace through all stored procedures

前端 未结 13 1206
萌比男神i
萌比男神i 2020-12-30 03:05

Actually, this is a 2 part question.

  1. Is it possible to use some sort of functionality to search through every stored procedure for a string and possibly rep

13条回答
  •  北荒
    北荒 (楼主)
    2020-12-30 03:28

    I found this script where you can define search for and replace by text and simply run it to get text replaced in all procedures at once. I hope this will help you in bulk.

    -- set "Result to Text" mode by pressing Ctrl+T
    SET NOCOUNT ON
    
    DECLARE @sqlToRun VARCHAR(1000), @searchFor VARCHAR(100), @replaceWith VARCHAR(100)
    
    -- text to search for
    SET @searchFor = '[MY-SERVER]'
    -- text to replace with
    SET @replaceWith = '[MY-SERVER2]'
    
    -- this will hold stored procedures text
    DECLARE @temp TABLE (spText VARCHAR(MAX))
    
    DECLARE curHelp CURSOR FAST_FORWARD
    FOR
    -- get text of all stored procedures that contain search string
    -- I am using custom escape character here since i need to espape [ and ] in search string
    SELECT DISTINCT 'sp_helptext '''+OBJECT_SCHEMA_NAME(id)+'.'+OBJECT_NAME(id)+''' ' 
    FROM syscomments WHERE TEXT LIKE '%' + REPLACE(REPLACE(@searchFor,']','\]'),'[','\[') + '%' ESCAPE '\'
    ORDER BY 'sp_helptext '''+OBJECT_SCHEMA_NAME(id)+'.'+OBJECT_NAME(id)+''' '
    
    OPEN curHelp
    
    FETCH next FROM curHelp INTO @sqlToRun
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
       --insert stored procedure text into a temporary table
       INSERT INTO @temp
       EXEC (@sqlToRun)
    
       -- add GO after each stored procedure
       INSERT INTO @temp
       VALUES ('GO')
    
       FETCH next FROM curHelp INTO @sqlToRun
    END
    
    CLOSE curHelp
    DEALLOCATE curHelp
    
    -- find and replace search string in stored procedures 
    -- also replace CREATE PROCEDURE with ALTER PROCEDURE
    UPDATE @temp
    SET spText = REPLACE(REPLACE(spText,'CREATE PROCEDURE', 'ALTER PROCEDURE'),@searchFor,@replaceWith)
    
    SELECT spText FROM @temp
    -- now copy and paste result into new window
    -- then make sure everything looks good and run
    GO
    

    Here is the reference link :
    http://www.ideosity.com/ourblog/post/ideosphere-blog/2013/06/14/how-to-find-and-replace-text-in-all-stored-procedures

提交回复
热议问题