Sql server 无法截断表-SQL Server

Sql server 无法截断表-SQL Server,sql-server,database,Sql Server,Database,我得到以下错误 无法删除对象“tablename”,因为它被外键约束引用 这意味着有我要截断的表的引用。然后,我使用以下查询删除所有表的所有约束 use mydb EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" truncate table mytable. 但它不起作用,请协助 不,不要使用spmsforeachtable,它没有文档记录或不受支持。相反,运行命令sp_help mytable或sp_helpte

我得到以下错误

无法删除对象“tablename”,因为它被外键约束引用

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

use mydb

EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

truncate table mytable.
但它不起作用,请协助

不,不要使用spmsforeachtable,它没有文档记录或不受支持。相反,运行命令sp_help mytable或sp_helptext mytable,查看引用表mytable的所有表。暂时删除FK约束,然后运行TRUNCATE命令和其他处理

一切正常后,再次重新创建FK约束

不,不要使用spmsforeachtable,它没有文档记录或不受支持。相反,运行命令sp_help mytable或sp_helptext mytable,查看引用表mytable的所有表。暂时删除FK约束,然后运行TRUNCATE命令和其他处理


一切正常后,再次重新创建FK约束

试试这个,但不应该在生产环境中使用。 此代码将截断特定数据库中的所有表

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'

尝试此方法,但不应在生产环境中使用此方法。 此代码将截断特定数据库中的所有表

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'

在你提到你想要截断你的表之前,这个问题已经得到了回答,但是错误告诉你不能删除这个表。。。。。。现在怎么办?截断或删除??和NOCHECK约束都不会删除或禁用约束。你到底想做什么?你用了什么代码?问题的文本与你的代码相矛盾。通过使用truncate和删除约束,您试图解决的实际问题是什么?@PanagiotisKanavos我尝试了truncate和drop,但都不起作用。在您提到要截断表之前,这已经回答了,但错误表明您无法删除表。。。。。。现在怎么办?截断或删除??和NOCHECK约束都不会删除或禁用约束。你到底想做什么?你用了什么代码?问题的文本与你的代码相矛盾。通过使用truncate和删除约束,您试图解决的实际问题是什么?@PanagiotisKanavos我尝试了truncate和drop,但都不起作用。