从内部查询返回的表中读取数据

时间:2013-11-19 19:57:59

标签: sql sql-server relational-database nested-queries

所以,我正在开发一个项目,我需要找到所有具有列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';

现在我想使用从此查询返回的每个表来删除这些表中满足某些条件的所有行。有人可以帮我解决'嵌套查询'吗?

1 个答案:

答案 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')

http://sqlfiddle.com/#!3/475c0/2