在单个查询中访问400个表

时间:2011-10-16 05:33:26

标签: sql

我想从多个表中删除带有条件的行。

DELETE
FROM table_1
WHERE lst_mod_ymdt = '2011-01-01'

问题是,表的数量是400,从table_1到table_400。 我可以将查询应用于单个查询中的所有表吗?

1 个答案:

答案 0 :(得分:1)

如果您正在使用SQL Server 2005及更高版本,您可以尝试这样的事情(其他版本和RDMS也有类似的方法来执行此操作):

DECLARE @sql VARCHAR(MAX)

SET @sql = (SELECT 'DELETE FROM [' + REPLACE(Name, '''','''''') + '] WHERE lst_mod_ymdt = ''' + @lst_mod_ymdt + ''';' FROM sys.tables WHERE Name LIKE 'table_%' FOR XML PATH(''))

--PRINT @sql;
EXEC ( @sql );

和动态sql一样,请记住转义'字符。

如果您说table_341没有lst_mod_ymdt列,则可能会失败。