簡體   English   中英

解析數據庫中的存儲過程

[英]Parsing stored procedures in a database

我被要求查找在表上修改字段名稱的影響,然后查找此更改的影響。

盡管很容易確定受影響的表,但是在嘗試確定受影響的存儲過程時遇到了問題。

我也希望這個腳本也可以幫助開發。 能夠識別所有必要的程序。

我下面有一些代碼創建一個帶有過程名稱的臨時表和一個將包含過程文本(sp_helptext)的字段。 如果我可以將sp_helptext的內容輸入該字段,則我的計划(雖然不完善)可以獲取過程名稱,參數和過程文本。

--drop procedure dbo.sp_getProcText
create procedure dbo.sp_getProcText
(
      @proc_name varchar(max),
      @output varchar(max) output
)  

AS  
    BEGIN  
        declare @exec_string varchar(max);
        set @exec_string = 'sp_helptext' + ' ' +  @proc_name 
        exec sp_executesql @exec_string, @output
    END
go

create table #temp_sp_parse( proc_name varchar(max), proc_text varchar(max));
go

declare @proc_text_out varchar(max)

insert into 
    #temp_sp_parse (proc_name, proc_text)
        select 
            sysobjects.name , exec dbo.sp_getProcText(sysobjects.name, @proc_text_out) 
        from 
            dbo.sysobjects 
        join 
            dbo.syscolumns  on 
                syscolumns.id = sysobjects.id 
        where 
        (
            syscolumns.name like N'%rti%' and
            sysobjects.name like '%%'
        )
        and 
            sysobjects.type ='P'
go

select * from #temp_sp_parse
drop procedure sp_getProcText
drop table #temp_sp_parse

MS SQL插入中的exec有問題。

任何人都可以推薦修復程序或更好的解決方案。

我已經寫了一篇關於此的博客文章: http : //anehir.blogspot.com.tr/2012/11/ms-sql-search-within-programmable.html

基本上,您使用系統視圖:sys.syscomments。
完整代碼如下:

declare @keyword1 varchar(50) = 'SomeTable'
declare @keyword2 varchar(50) = 'SomeColumn'

create table #t
(
 [ReferencingDatabase] varchar(100),
 [ReferencingSchema] varchar(100),
 [ReferencingObject] varchar(100),
 [ReferencingObjectType] varchar(100),
 [HelpText] varchar(300)
)

declare @cmd1 varchar(8000)
set @cmd1 = '
use ?
if ''?'' not in (''distribution'', ''master'', ''model'', ''msdb'', ''tempdb'', ''mssqlsystemresource'')
begin
 insert into #t
 select
  ''?'' as [ReferencingDatabase],
  s.name as [ReferencingSchema],
  o.name as [ReferencingObject],
  o.type_desc as [ReferencingObjectType],
  ''sp_helptext '''''' + s.Name + ''.'' + o.name + '''''''' as [Script]
 from sys.syscomments c
 left outer join sys.objects o on o.object_id = c.id
 left outer join sys.schemas s on s.schema_id = o.schema_id
 where
 c.text like ''%' + @keyword1 + '%''
 and c.text like ''%' + @keyword2 + '%''
end
'
exec sp_msforeachdb @cmd1
select * from #t
drop table #t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM