25

sp_msforeachtableすべてのテーブルに対してクエリを実行できることを知っています。

100 個のテーブルがあり、97 個のテーブルに対して同じクエリを実行したいと考えています。

私はこのクエリを使用しています:EXEC sp_MSForEachTable "DELETE FROM ?"

特定のテーブルを除外することはできますか?

4

3 に答える 3

47
EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
                                                    ISNULL(OBJECT_ID(''[dbo].[T1]''),0),
                                                    ISNULL(OBJECT_ID(''[dbo].[T2]''),0)
                                                   )
                        DELETE FROM ?'
于 2011-10-21T17:31:45.237 に答える
10

スキーマとテーブルを含めたり除外したりするために遭遇した最も単純な構文:

exec sp_MSforeachtable 'print ''?''', 
@whereand='and Schema_Id=Schema_id(''Value'') and o.Name like ''%Value%'''
于 2016-09-15T11:22:59.870 に答える
6

sp_MSforeachtable は文書化されていない手順ですが、その例によれば: http://avinashkt.blogspot.ru/2008/05/useful-operations-with-spmsforeachtable.html追加の 2 番目のパラメーター @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)  
                                                       )'
于 2012-11-28T09:57:50.427 に答える