我想编写一个动态SQL,它将删除[deleted] = 1的特定数据库的所有表中的数据。我还想显示从每个表中删除的记录数。我的数据库名称是Test1。所以,我对一个表的正常查询是:
从Test1.DimCustomer中删除[deleted] = 1(我想让它为Test1数据库中的所有表动态
因为,我将在生产中为数据库中的所有表执行此操作,我想知道要删除的记录的行数。另外,我想知道这个动态查询的退出计划。那么,有人可以帮忙吗?感谢。
答案 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
一旦你感到舒服,你可以取消注释最后一行来测试它。然后将回滚更改为提交。