如何将sys.sp_MSforeachtable与不同的模式一起使用?

时间:2013-12-18 09:40:12

标签: sql-server sql-server-2008 tsql sql-server-2008-r2

我使用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用于不同的架构?

2 个答案:

答案 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