with varios valores una tables tabla registros registro modificar keys foreign eliminar drop sql sql-server sp-msforeachtable

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 ?''