出于设计目的,我需要截断所有具有大量FK的DB。我不能简单地使用DELETE命令,因为有些表设置了TinyInts的Identity并包含大约150个项目。
这是一个查询(截断所选数据库中的所有表格)我正在尝试运行
Declare @t varchar (1024)
Declare tbl_cur cursor for
select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
OPEN tbl_cur
FETCH NEXT from tbl_cur INTO @t
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('TRUNCATE TABLE '+ @t)
FETCH NEXT from tbl_cur INTO @t
END
CLOSE tbl_cur
DEALLOCATE tbl_Cur
使用多个FK实现截断DB的最佳和最简单的方法是什么?
答案 0 :(得分:4)
如果您避免删除的原因只是为了避免身份列的问题,您可以删除然后使用
DBCC CHECKIDENT('TableName', RESEED, 0)
将它们重置为零。
答案 1 :(得分:2)
如果您尝试删除所有相关表中的所有行,是否可以删除约束,截断表,然后再次创建约束?
或...... this也可能有用。看起来它从依赖树的底部循环直到一切都消失了。
答案 2 :(得分:1)
您可以禁用所有外键,截断表,然后重新启用外键。
禁用:ALTER TABLE table_name NOCHECK CONSTRAINT ALL
启用:ALTER TABLE table_name CHECK CONSTRAINT ALL