質問

私は、自動的にテーブルの複製を作成するために、dymamic SQLコードを作成したい。

私はそれがSQL変数に渡し、コードでそれらを使用することが可能だように、次のコードを動的にする方法についてはこだわっています。

:私はここにコードがある...検索と非常に素晴らしいではありません'TODO:'部品を交換して、現時点では自分自身を助けます
DECLARE @sql VARCHAR(MAX)
SET @sql = ''

SELECT
  @sql = @sql + 
         'exec sp_addarticle @publication = ''TODO:TREP_PUBLICATION_NAME'',@article = N''' + 
         name + 
         ''', @source_owner = N''dbo'', @source_object = N''' + 
         name + 
         ''', @type = N''logbased'', @description = N'''', @creation_script = N'''', @pre_creation_cmd = N''delete'', @schema_option = 0x0000000000000000, @identityrangemanagementoption = N''none'', @destination_table = N''' + 
         name + 
         ''', @destination_owner = N''dbo'', @status = 8, @vertical_partition = N''false'', @ins_cmd = N''SQL'', @del_cmd = N''SQL'', @upd_cmd = N''SQL'''
FROM
  TODO:PUBLICATION_DB.sys.tables
WHERE
  type      = 'U'
  AND name IN (
    SELECT 
      name
    FROM
      OPENROWSET('SQLOLEDB', 'TODO:SUBSCRIBER_SERVER';
                 'TODO:SUBSCRIBER_LOGIN';
                 'TODO:SUBSCRIBER_PASSWORD', 'select * from TODO:SUBSCRIBER_DB.sys.tables where type=''U''')
  )
  AND name IN (
    SELECT
      TABLE_NAME
    FROM
      TODO:PUBLICATION_DB.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE
      TODO:TABLE_NAME_FILTER
  )

EXEC(@Sql)

一つの問題は、私は、動的SQLブロック内の動的SQLが必要だということです。誰かが、変数を使用してこのコードを変換するために私を助けることができれば、私は本当にそれをいただければ幸いです!

のおかげで ダニエル

役に立ちましたか?

解決

動的SQLは答えではないかもしれません - それは、あなたがそれが簡単に自動化すると「パラメータ-IZE」作ることができないという意味ではありません。

言い換えれば、私はかつて私は頻繁にように加入者を取り壊す、さらには(たまに)出版物を再作成し、しなければならなかった巨大なレプリケーショントポロジを管理していました。むしろ動的に物事を照会し、1落ち-急襲ですべてをしたT-SQLを生成しようとしていじくるよりも、私はT-SQLテンプレート(.tqlファイル)の数を作成して、私はその後、いくつかのパラメータを取り込むために使用することができること、およびその後、緩い回します。

あなたがテンプレートに慣れていないなら、

そして、ちょうどこのビデオをチェックアウト - 迅速速度にあなたを取得しますれます:

http://www.sqlservervideos.com/video/using-sql -server-テンプレート

そして、ここで私が記事を追加するために使用したテンプレートの種類の例です - あなたが撮影しているよう:

/* Add Article */


USE [<database,sysname,--Default>]
GO

EXEC sp_addarticle
    @publication = N'<publicationName,sysname,--Default>',
    @article = N'<article_1,sysname,--Default>',
    @source_owner = N'dbo', 
    @source_object = N'<article_1,sysname,--Default>',
    @destination_table = N'<article_1,sysname,--Default>',
    @type = N'logbased', 
    @creation_script = null, 
    @description = null, 
    @pre_creation_cmd = N'drop', 
    @schema_option = <bitmask_1,binary(8),0x000000000000CCD3>,
    @status = 16, 
    @vertical_partition = N'false', 
    @ins_cmd = N'CALL sp_MSins_<article_1,sysname,--Default>', 
    @del_cmd = N'CALL sp_MSdel_<article_1,sysname,--Default>', 
    @upd_cmd = N'MCALL sp_MSupd_<article_1,sysname,--Default>', 
    @filter = null, 
    @sync_object = null, 
    @auto_identity_range = N'false'
GO

EXEC sp_addarticle
    @publication = N'<publicationName,sysname,--Default>',
    @article = N'<article_2,sysname,--Default>',
    @source_owner = N'dbo', 
    @source_object = N'<article_2,sysname,--Default>',
    @destination_table = N'<article_2,sysname,--Default>',
    @type = N'logbased', 
    @creation_script = null, 
    @description = null, 
    @pre_creation_cmd = N'drop', 
    @schema_option = <bitmask_2,binary(8),0x000000000000CCD3>,
    @status = 16, 
    @vertical_partition = N'false', 
    @ins_cmd = N'CALL sp_MSins_<article_2,sysname,--Default>', 
    @del_cmd = N'CALL sp_MSdel_<article_2,sysname,--Default>', 
    @upd_cmd = N'MCALL sp_MSupd_<article_2,sysname,--Default>', 
    @filter = null, 
    @sync_object = null, 
    @auto_identity_range = N'false'
GO

EXEC sp_addarticle
    @publication = N'<publicationName,sysname,--Default>',
    @article = N'<article_3,sysname,--Default>',
    @source_owner = N'dbo', 
    @source_object = N'<article_3,sysname,--Default>',
    @destination_table = N'<article_3,sysname,--Default>',
    @type = N'logbased', 
    @creation_script = null, 
    @description = null, 
    @pre_creation_cmd = N'drop', 
    @schema_option = <bitmask_3,binary(8),0x000000000000CCD3>,
    @status = 16, 
    @vertical_partition = N'false', 
    @ins_cmd = N'CALL sp_MSins_<article_3,sysname,--Default>', 
    @del_cmd = N'CALL sp_MSdel_<article_3,sysname,--Default>', 
    @upd_cmd = N'MCALL sp_MSupd_<article_3,sysname,--Default>', 
    @filter = null, 
    @sync_object = null, 
    @auto_identity_range = N'false'
GO

EXEC sp_addarticle
    @publication = N'<publicationName,sysname,--Default>',
    @article = N'<article_4,sysname,--Default>',
    @source_owner = N'dbo', 
    @source_object = N'<article_4,sysname,--Default>',
    @destination_table = N'<article_4,sysname,--Default>',
    @type = N'logbased', 
    @creation_script = null, 
    @description = null, 
    @pre_creation_cmd = N'drop', 
    @schema_option = <bitmask_4,binary(8),0x000000000000CCD3>,
    @status = 16, 
    @vertical_partition = N'false', 
    @ins_cmd = N'CALL sp_MSins_<article_4,sysname,--Default>', 
    @del_cmd = N'CALL sp_MSdel_<article_4,sysname,--Default>', 
    @upd_cmd = N'MCALL sp_MSupd_<article_4,sysname,--Default>', 
    @filter = null, 
    @sync_object = null, 
    @auto_identity_range = N'false'
GO

そして、いくつかのケースでは...私はまた、順番にいくつかのネストされた/動的SQLを持っていたこれらのテンプレートを使用していました。しかし、両方を使用して、私は非常に簡単にオーバー複雑なものなしで必要以上に冗長なタスクの一部を飼いならすことができたことがわかりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top