我们有一个中等大小的数据库,结构明智,我们需要进行软删除,硬删除。部分过程是在删除已删除列之前,实际删除已被软删除的行。我已经生成了一个删除列表,但我可能会遇到外键异常。
所以,我按'object_id'命令,希望表中的表被添加,并且object_id增加了。部署后未添加任何表。
那么,这适合吗?
SELECT 'DELETE FROM [' + ss.name + '].[' + st.name + '] WHERE DELETED IS NOT NULL'
FROM sys.tables st
INNER JOIN sys.schemas ss
ON ss.schema_id = st.schema_id
WHERE type='U'
AND st.name NOT IN ('JobRunLog', 'Log')
AND st.Object_ID IN(
SELECT DISTINCT(st.object_id)
FROM sys.tables st
INNER JOIN sys.columns cc
ON st.object_id = cc.object_id
AND cc.name = 'DELETED'
)
ORDER BY st.object_id DESC
我要在object_id上倒退,因为我想先删除最后添加的表。只有在FK存在的情况下才能创建它们。