在没有修改的情况下向存储过程添加额外代码

时间:2015-06-24 07:46:29

标签: sql-server stored-procedures

MsSql中有一个存储过程。我想添加这个存储过程只需一行额外的代码,但我想在大约20个数据库中进行。显然我不想右键单击>修改它们中的每一个。我想创建一个脚本来执行此操作,但问题是,此存储过程的修改脚本大约是550行,我不想将所有这些行仅添加到我的升级脚本中,因为已有数千行脚本中的行。

我找到了这样的解决方案;它基本上做的是,它获取存储过程的创建脚本,找到一个特定的唯一行('append_5 = zr.append_5,')并替换它添加我想要的行('append_5 = zr.append_5,before_head = zr.before_head,before_body = zr.before_body,')。

Declare @prDefinition nvarchar(MAX); 
SET @prDefinition = (select  object_definition(object_id) proceduredefinition from sys.procedures where name = 'cms_asp_approval_approve_zone_revision')
IF CHARINDEX('append_5 = zr.append_5, before_head = zr.before_head, before_body = zr.before_body,',@prDefinition) <= 0
BEGIN
SET @prDefinition = REPLACE(@prDefinition,'append_5 = zr.append_5,','append_5 = zr.append_5, before_head = zr.before_head, before_body = zr.before_body,')
SET @prDefinition = REPLACE(@prDefinition,'CREATE procedure [dbo].[cms_asp_approval_approve_zone_revision]','ALTER procedure [dbo].[cms_asp_approval_approve_zone_revision]')
EXEC (@prDefinition)
END
GO

这样可以正常使用,但这当然是最糟糕的情况,并且真的是不忠实的。什么 - 更专业 - 你有什么方法来解决这个问题?

编辑:我当然知道创建一个“ALTER”脚本可以解决这个问题,但它给了我额外的550行,这是我不想要的。我想要一个较短的脚本。

1 个答案:

答案 0 :(得分:0)

你在这里有一些误解。您可以更改存储过程,并在编写脚本时重新创建它。它不会附加到现有的存储过程,它会改变它:

create stored procedure spTest
as

select 1
select 2
...
select n
go

然后只需改变你的程序:

alter stored procedure spTest
as

select 1
select 2
...
select n
select n + 1
go