所以,我正在开发一个项目,我需要找到所有具有列xyz
的表,然后如果该表中该行的updated_at日期早于某些表,则从这些表中删除所有行持续时间。
我从SQL Server获得了所有表的列表,如下所示:
SELECT
t.name AS table_name
FROM
sys.tables AS t
INNER JOIN
sys.columns c ON t.object_id = c.object_id
WHERE
c.name = 'xyz';
现在我想使用从此查询返回的每个表来删除这些表中满足某些条件的所有行。有人可以帮我解决'嵌套查询'吗?
答案 0 :(得分:3)
你正在考虑的是不会去上班;您需要在delete
语句中明确指定要删除的表。
我的方法是使用您的查询动态生成delete
语句,然后将查询的输出保存在文件中,然后运行该文件。这也使您有机会在运行之前检查并仔细检查删除,这是您在进行大规模数据更改时的一个好主意。
select
'delete from ' + t.name + ' where updated_at <= ''2013-01-01'';'
from
sys.tables t
where
exists (select null from sys.columns c where c.object_id = t.object_id and c.name = 'xyz')