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

そして、必要に応じて、これらを更新する必要がある場所が少なくとも 1 か所だけあります。

于 2013-10-04T09:47:13.877 に答える