我收到以下错误。
无法删除对象' tablename'因为它是由FOREIGN KEY约束引用的。
这意味着我想要截断的表有引用。然后我使用以下查询删除所有表的所有约束。
use mydb
EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
truncate table mytable.
但它没有用,请协助。
答案 0 :(得分:4)
不,不要使用sp_MSforeachtable
并且没有记录或支持。而是运行命令sp_help mytable
或sp_helptext mytable
,并查看引用表mytable
的所有表。暂时删除FK约束,然后运行TRUNCATE
命令和其他处理。
一切正常后,再次重新创建FK约束。
答案 1 :(得分:0)
尝试此操作,但不应在生产环境中使用此功能。 此代码将截断特定数据库中的所有表。
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
exec sp_MSforeachtable 'DELETE FROM ?'
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'
exec sp_MSforeachtable 'IF NOT EXISTS (SELECT *
FROM SYS.IDENTITY_COLUMNS
JOIN SYS.TABLES ON SYS.IDENTITY_COLUMNS.Object_ID = SYS.TABLES.Object_ID
WHERE SYS.TABLES.Object_ID = OBJECT_ID(''?'') AND SYS.IDENTITY_COLUMNS.Last_Value IS NULL)
AND OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1
DBCC CHECKIDENT (''?'', RESEED, 0) WITH NO_INFOMSGS'