Как исключить таблицы из sp_msforeachtable - PullRequest
22 голосов
/ 21 октября 2011

Я знаю, что sp_msforeachtable позволяет выполнять запросы ко всем таблицам.

У меня 100 таблиц, и я хочу выполнить один и тот же запрос к 97 таблицам.

Я использую этот запрос: EXEC sp_MSForEachTable "DELETE FROM ?"

Можно ли исключить определенные таблицы?

Ответы [ 3 ]

44 голосов
/ 21 октября 2011
EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
                                                    ISNULL(OBJECT_ID(''[dbo].[T1]''),0),
                                                    ISNULL(OBJECT_ID(''[dbo].[T2]''),0)
                                                   )
                        DELETE FROM ?'
5 голосов
/ 15 сентября 2016

Простейший синтаксис, с которым я столкнулся, включающий или исключающий схемы и таблицы:

exec sp_MSforeachtable 'print ''?''', 
@whereand='and Schema_Id=Schema_id(''Value'') and o.Name like ''%Value%'''
4 голосов
/ 28 ноября 2012

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)  
                                                       )'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...