动态SQL语句,用于根据filter(where)条件删除sql server中特定数据库的所有表中的数据

时间:2018-05-29 15:02:47

标签: sql-server ssms-2014

我想编写一个动态SQL,它将删除[deleted] = 1的特定数据库的所有表中的数据。我还想显示从每个表中删除的记录数。我的数据库名称是Test1。所以,我对一个表的正常查询是:

从Test1.DimCustomer中删除[deleted] = 1(我想让它为Test1数据库中的所有表动态

因为,我将在生产中为数据库中的所有表执行此操作,我想知道要删除的记录的行数。另外,我想知道这个动态查询的退出计划。那么,有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:0)

使用系统视图来帮助您构建动态sql。这样的事情对你有用。

declare @SQL nvarchar(max) = 'begin transaction;'

select @SQL = @SQL + 'select count(*), TableName = ' + quotename(s.name) + '.' + quotename(t.name) + ' from ' + quotename(s.name) + '.' + quotename(t.name) + ' where [deleted] = 1; delete from ' + quotename(s.name) + '.' + quotename(t.name) + ' where [deleted] = 1;'
from sys.tables t
join sys.schemas s on s.schema_id = t.schema_id

select @SQL = @SQL + 'rollback transaction;'

select @SQL
--exec sp_executesql @SQL

一旦你感到舒服,你可以取消注释最后一行来测试它。然后将回滚更改为提交。