2011-10-21 18 views
15

Sé que sp_msforeachtable permite realizar consultas en todas las tablas.Cómo excluir tablas de sp_msforeachtable

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?

Respuesta

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

+1 - versión mucho más elegante de mi respuesta :) – JNK

4

sp_MSforeachtable es un procedimiento documentado, pero de acuerdo con este ejemplo: http://avinashkt.blogspot.ru/2008/05/useful-operations-with-spmsforeachtable.html que podrían proporcionar @whereand segundo parámetro adicional para limitar la lista de tablas.


La consulta 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í ejemplo de sintaxis 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) 
                 )' 
+0

+1 Agregué más detalles y un ejemplo. –

2

sintaxis más sencilla que encontré para incluir o excluir esquemas y tablas:

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