我被要求查找修改表格中字段名稱的影響,並隨後找到此更改的影響。解析數據庫中的存儲過程
儘管識別受影響的表格非常容易,但我在嘗試識別受影響的存儲過程時遇到了問題。
我也希望這個腳本也能幫助開發;能夠識別所有必要的程序。
我在下面創建了一個臨時表,其中包含過程名稱和一個包含過程文本(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問題。
任何人都可以推薦一個修復或可能更好的解決方案。
我的建議是要改變存儲過程的名稱,而不是使用** SP _ **前綴[Microsoft推薦](https://msdn.microsoft.com/ EN-US /庫/ dd172115%28V = VS.100%29.aspx)。 –
請標記使用的dbms。 (產品特定的代碼在那裏......) – jarlh
備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並使用別的東西作爲前綴 - 或者根本沒有前綴! –