get the text of a stored procedure into a variable in SQL Server

前端 未结 3 1317
天命终不由人
天命终不由人 2021-01-18 07:10

I want to loop through several stored procs and extract one string form each of them to use in another procedure (basically the 4-part remote server string)

So I can

相关标签:
3条回答
  • 2021-01-18 07:16

    The portable way is to use the ANSI/ISO view INFORMATION_SCHEMA.ROUTINES, but you'll only get the first 4000 characters of the stored procedure definition:

    declare @source_code varchar(max)
    
    select @source_code = t.ROUTINE_DEFINITION
    from information_schema.routines t
    where specific_schema = 'owner-schema'             -- e.g., dbo
      and specific_name   = 'my_stored_procedure_name' -- your stored procedure name here
    

    Or you can use the system view sys.sql_modules in the same vein:

    declare @source_code varchar(max)
    
    select @source_code = definition
    from sys.sql_modules
    where object_id = object_id('dbo.my_stored_procedure_name')
    

    Or, the simplest way:

    declare @source_code varchar(max)
    set @source_code = object_definition( 'dbo.my_stored_procedure_name' )
    
    0 讨论(0)
  • 2021-01-18 07:23

    You can use the system stored procedure sp_helptext to get the stored procedure definition into a table and then just query against that temp table / table variable something like this..

    DECLARE @TABLE TABLE
    (Line_Number INT IDENTITY(1,1), Text_Column NVARCHAR(MAX));
    
    INSERT INTO @TABLE(Text_Column)
    EXECUTE sp_helptext Your_Proc_Name
    
    SELECT * 
    FROM @TABLE
    WHERE Text_Column LIKE '%BOCTEST%'
    

    UPDATE

    SELECT p.name
          ,m.[definition]
    FROM  sys.procedures p 
    INNER JOIN sys.sql_modules m
    ON    P.[object_id] = m.[object_id]
    WHERE m.[definition] LIKE '%BOCTEST%'
    
    0 讨论(0)
  • 2021-01-18 07:32

    Nicholas Carey's third option needs some changes,

    object_definition function needs object_id as parameter,

    so the code should be

    declare @source_code varchar(max)
    declare @objectid int
    select @objectid=object_id('dbo.my_stored_procedure_name')
    select @source_code = object_definition(@objectid )
    

    Check to this link more details https://msdn.microsoft.com/en-IN/library/ms176090.aspx

    0 讨论(0)
提交回复
热议问题