Cómo excluir tablas de sp_msforeachtable

Sé que sp_msforeachtable permite realizar consultas en todas las tablas.

Tengo 100 tablas y quiero realizar la misma consulta en 97 tablas.

Estoy usando esta consulta: EXEC sp_MSForEachTable "DELETE FROM ?"

¿Es posible excluir ciertas tablas?

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

sp_MSforeachtable es un procedimiento no documentado, pero de acuerdo con ese ejemplo: http://avinashkt.blogspot.ru/2008/05/useuse-operations-with-spmsforeachtable.html puede proporcionar el segundo parámetro adicional @whereand para limitar la list de tablas.


La consulta a la que se adjunta es la siguiente.

 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 

Así que la syntax de ejemplo sería

  EXEC sp_MSforeachtable @command1 = N'PRINT ''?'' ', @whereand = 'AND o.id NOT IN ( ISNULL(OBJECT_ID(''[dbo].[T1]''),0), ISNULL(OBJECT_ID(''[dbo].[T2]''),0) )' 

La syntax más simple que encontré para include o excluir esquemas y tablas:

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