我被要求查找修改表格中字段名称的影响,并随后找到此更改的影响。解析数据库中的存储过程
尽管识别受影响的表格非常容易,但我在尝试识别受影响的存储过程时遇到了问题。
我也希望这个脚本也能帮助开发;能够识别所有必要的程序。
我在下面创建了一个临时表,其中包含过程名称和一个包含过程文本(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_'并使用别的东西作为前缀 - 或者根本没有前缀! –