2010-03-20 61 views
3

我尝试了很多命令来禁用我的数据库中的表约束来截断所有表,但现在仍然给我同样的错误
无法截断表“',因为它正在被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 

和我以前的错误消息..任何可以请帮我解决苏哈一个问题,每次?

回答

5

如果要截断表,可能必须删除外键并将其添加回去。从here

“不能在由FOREIGN KEY约束引用的表上使用TRUNCATE TABLE;而是使用不带WHERE子句的DELETE语句,因为TRUNCATE TABLE未记录,所以无法激活触发器。

类似的问题here在SO。

+1

的确。 TRUNCATE需要DROP。 – gbn 2010-03-20 12:14:34

+0

从第一个链接开始:“不能在由FOREIGN KEY约束引用的表上使用TRUNCATE TABLE;而是使用DELETE语句,而不使用WHERE子句**。” (强调我的。) – ladenedge 2011-03-22 18:44:10

1

我认为这是一个相当糟糕的主意。在数据库的所有表上盲目运行这些SQL命令并不是一个好主意。

你究竟想要做什么?

如果你想用同样的表创建一个数据库的副本(没有数据),你可以很容易地使用SSIS包来做到这一点(只要确保复制数据)选项设置为False

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