无法截断表 - SQL Server

时间:2016-01-05 06:50:19

标签: sql-server database

我收到以下错误。

  

无法删除对象' tablename'因为它是由FOREIGN KEY约束引用的。

这意味着我想要截断的表有引用。然后我使用以下查询删除所有表的所有约束。

use mydb

EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

truncate table mytable.

但它没有用,请协助。

2 个答案:

答案 0 :(得分:4)

不,不要使用sp_MSforeachtable并且没有记录或支持。而是运行命令sp_help mytablesp_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'
相关问题