我使用SQL Server 2008 R2
,我希望与Change Data Capture
合作。
我想为我的所有Tables
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'TestTable',
@role_name = NULL
我写这个SQL语句。
Declare @Command NVarchar(Max)
Set @Command = '
EXEC sys.sp_cdc_enable_table
@source_schema = N''dbo'',
@source_name = N''?'',
@role_name = NULL
'
Exec sys.sp_MSforeachtable @Command
但我在我的数据库中使用了几个Schema
?
如何将sys.sp_MSforeachtable
用于不同的架构?
答案 0 :(得分:1)
我认为使用sys视图来满足这种需求会更容易
declare @schemaName nvarchar(max);
declare @tableName nvarchar(max);
declare curs CURSOR FOR
select TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
where table_type = 'BASE TABLE'
OPEN curs
FETCH curs into @schemaName, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sys.sp_cdc_enable_table @source_schema = @schemaName, @source_name = @tableName, @role_name = null
FETCH curs into @schemaName, @tableName;
END
CLOSE curs
DEALLOCATE curs
答案 1 :(得分:1)
你的意思是这样的:
exec sp_MSforeachtable
'select SUBSTRING(''?'', 0,
charindex(''.'', ''?'')),
SUBSTRING(''?'', charindex(''.'', ''?'') + 1, len(''?''))'
请不要使用游标,而不是使用sysview,你可以使用information_schema.tables