sql - varios - Cómo excluir tablas de sp_msforeachtable
modificar valores de una tabla sql (3)
La sintaxis más simple 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%''''''
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?
sp_MSforeachtable es un procedimiento no documentado, pero de acuerdo con ese ejemplo: http://avinashkt.blogspot.ru/2008/05/useful-operations-with-spmsforeachtable.html puede proporcionar un segundo parámetro adicional @whereand para limitar la lista de tablas.
La consulta a la que se anexa esto 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 sintaxis 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)
)''
EXEC sp_MSforeachtable ''IF OBJECT_ID(''''?'''') NOT IN (
ISNULL(OBJECT_ID(''''[dbo].[T1]''''),0),
ISNULL(OBJECT_ID(''''[dbo].[T2]''''),0)
)
DELETE FROM ?''