0

我正在为 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

有谁知道这是否可能?如果可能的话,我应该用什么方法来完成这个?

4

1 回答 1

0

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

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',

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

于 2013-10-04T09:47:13.877 回答