如何从sp_msforeachtable中排除表格

27
我知道sp_msforeachtable可以在所有表上执行查询。
我有100个表,我想在其中97个表上执行相同的查询。
我使用的查询是:EXEC sp_MSForEachTable "DELETE FROM ?" 是否可能排除某些表格?
3个回答

50
EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
                                                    ISNULL(OBJECT_ID(''[dbo].[T1]''),0),
                                                    ISNULL(OBJECT_ID(''[dbo].[T2]''),0)
                                                   )
                        DELETE FROM ?'

12

我遇到的最简单的语法,用于包含或排除模式和表:

最简单的语法以包含或排除模式和表:

exec sp_MSforeachtable 'print ''?''', 
@whereand='and Schema_Id=Schema_id(''Value'') and o.Name like ''%Value%'''

6

sp_MSforeachtable是一个未被记录的过程,但根据这个例子:http://avinashkt.blogspot.ru/2008/05/useful-operations-with-spmsforeachtable.html,您可以提供附加的第二个参数@whereand来限制表列表。


它会追加到以下查询中。

SELECT   '[' + REPLACE(schema_name(syso.schema_id), N']', N']]') + ']' 
       + '.' 
       + '[' + REPLACE(object_name(o.id), N']', N']]') + ']'
FROM   dbo.sysobjects o
       JOIN sys.all_objects syso
         ON o.id = syso.object_id
WHERE  OBJECTPROPERTY(o.id, N'IsUserTable') = 1
       AND o.category & ltrim(str(CONVERT(INT, 0x0002))) = 0 

所以,示例语法将是:
   EXEC sp_MSforeachtable @command1 = N'PRINT ''?'' ', 
                          @whereand = 'AND o.id NOT IN (
                                                     ISNULL(OBJECT_ID(''[dbo].[T1]''),0), 
                                                     ISNULL(OBJECT_ID(''[dbo].[T2]''),0)  
                                                       )'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接