在多次调用同一SQL Server存储过程时,如何对公共参数进行分组?

在多次调用同一SQL Server存储过程时,如何对公共参数进行分组?,sql,stored-procedures,parameters,sql-server-2008-r2,Sql,Stored Procedures,Parameters,Sql Server 2008 R2,我正在为Microsoft SQL Server 2008 R2编写SQL查询文件,该文件将调用多个存储过程来创建合并发布。基线脚本是通过Microsoft SQL Server Management Studio中的新建发布向导生成的 我面临的“问题”是,当使用sp_addmergearticle存储过程创建合并项目时,我需要定义许多对所有合并项目通用的参数,例如发布名称、源所有者、目标所有者等 那么,问题是:是否有一种方法可以对命名参数集合进行分组,并以通用方式提供这些参数,以便更简单地管理

我正在为Microsoft SQL Server 2008 R2编写SQL查询文件,该文件将调用多个存储过程来创建合并发布。基线脚本是通过Microsoft SQL Server Management Studio中的新建发布向导生成的

我面临的“问题”是,当使用
sp_addmergearticle
存储过程创建合并项目时,我需要定义许多对所有合并项目通用的参数,例如发布名称、源所有者、目标所有者等

那么,问题是:是否有一种方法可以对命名参数集合进行分组,并以通用方式提供这些参数,以便更简单地管理对这些参数的更改

例如,考虑下面的查询片段:

use [MyDatabase]
exec sp_addmergearticle @publication=N'MyPub', 
                        @article=N'MyTable#1', 
                        @source_object=N'MyTable#1', 
                        @source_owner=N'TheOwner', 
                        @destination_owner=N'TheOwner',
                        @allow_interactive_resolver=N'true'

exec sp_addmergearticle @publication=N'MyPub', 
                        @article=N'MyTable#2', 
                        @source_object=N'MyTable#2', 
                        @source_owner=N'TheOwner', 
                        @destination_owner=N'TheOwner',
                        @allow_interactive_resolver=N'true'

etc...

GO
现在,我想让这段脚本更易于阅读和维护,以便
sp_addmergearticle
调用将采用一组所有调用都通用的参数,以及一些特定于调用的特定参数

例如,像这样:

use [MyDatabase]

-- Common parameters for all merge articles
DECLARE @common_parameters
-- @publication=N'MyPub'
-- @source_owner=N'TheOwner', 
-- @destination_owner=N'TheOwner',
-- @allow_interactive_resolver=N'true'

exec sp_addmergearticle @common_parameters, 
                        @article=N'MyTable#1', 
                        @source_object=N'MyTable#1', 

exec sp_addmergearticle @common_parameters,
                        @article=N'MyTable#2', 
                        @source_object=N'MyTable#2', 

etc...

GO

有人知道这是否可能吗?如果可能,我应该使用什么方法来实现这一点?

您可以对某些值使用局部变量(不幸的是,这些值不能跨越批边界):


然后,至少有一个地方需要根据需要进行更新。

我担心这是唯一的方法,并希望有更好的方法。但我猜这就是我必须要做的。
use [MyDatabase]

-- Common parameters for all merge articles
DECLARE @publication sysname
DECLARE @source_owner sysname 
DECLARE @destination_owner sysname
DECLARE @allow_interactive_resolver nvarchar(5)
select @publication=N'MyPub',
       @source_owner=N'TheOwner', 
       @destination_owner=N'TheOwner',
       @allow_interactive_resolver=N'true'

exec sp_addmergearticle @publication=@publication,
                        @source_owner=@source_owner, 
                        @destination_owner=@destination_owner,
                        @allow_interactive_resolver=@allow_interactive_resolver,
                        @article=N'MyTable#1', 
                        @source_object=N'MyTable#1', 

exec sp_addmergearticle @publication=@publication,
                        @source_owner=@source_owner, 
                        @destination_owner=@destination_owner,
                        @allow_interactive_resolver=@allow_interactive_resolver,
                        @article=N'MyTable#2', 
                        @source_object=N'MyTable#2',