题
我想创建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”。
在换句话说,我曾经管理庞大的复制拓扑,我经常不得不推倒用户,甚至是(偶尔)重新出版,等等。而不是试图生成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。但是,通过使用两个,我发现我能够很容易驯服一些必要的多个冗余任务,而无需过于复杂的事情。
不隶属于 StackOverflow