我尝试了很多命令来禁用数据库中的表约束来截断所有表,但现在它仍然给出了同样的错误:
无法截断表'',因为它正被FOREIGN KEY约束引用。
我试试
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
EXEC sp_MSforeachtable "TRUNCATE TABLE ?"
我为每张桌子试过这个
ALTER TABLE [Table Name] NOCHECK CONSTRAINT ALL
truncate table [Table Name]
ALTER TABLE [Table Name] CHECK CONSTRAINT ALL
每次我有上一条错误消息。我该如何解决这个问题?
答案 0 :(得分:5)
如果要截断表,可能需要删除外键并将其添加回来。来自here。
“您不能在FOREIGN KEY约束引用的表上使用TRUNCATE TABLE;而是使用不带WHERE子句的DELETE语句。因为没有记录TRUNCATE TABLE,所以它不能激活触发器。”
SO中的类似问题here
答案 1 :(得分:1)
我认为这是一个相当糟糕的主意。在数据库中的所有表上盲目运行这些SQL命令并不是一个好主意。
你究竟想做什么?
如果你想用相同的表创建数据库的副本(例如),没有数据,你可以很容易地使用SSIS包(只需确保COPY DATA)选项设置为False < / p>
http://www.kodyaz.com/articles/transfer-sql-server-objects-task.aspx alt text http://www.kodyaz.com/images/articles/transfer-SQL-Server-Objects-Task/objects-tab.JPG