【问题标题】:How to delete all rows from all tables belonging to a particular schema in a SQL Server 2012 database?如何从属于 SQL Server 2012 数据库中特定模式的所有表中删除所有行?
【发布时间】:2017-06-21 05:36:17
【问题描述】:

我想从属于 SQL Server 2012 数据库中特定模式的所有表中删除所有行。

我在尝试从架构中的所有表中删除数据时遇到问题,我在这里做错了什么?

EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable @command1='Truncate Table ?',@whereand='and Schema_Id=Schema_id(''info'')'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?'
GO

我遇到了错误

消息 547,级别 16,状态 0,第 1 行 ALTER TABLE 语句 与 FOREIGN KEY 约束冲突 “FK__PayElemen__RealY__25476A76”。数据库发生冲突 "Saina",表 "info.iYear",列 'Year'。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我认为你必须先删除外键。就像你试图删除一个主键是另一个表的外键的表一样,你会得到一个错误,因为外键依赖于那个主键。不过只是猜测。可能有帮助
  • 因此,如果您有一个在 info 架构之外的表,并且该表具有对 info 架构内的表的外键引用,那么当重新启用外键时会发生什么?我怀疑这是您看到的错误中失败的 FK 的性质。
  • 感谢您的帮助。如何禁用所有外键约束?
  • 您已经禁用了所有外键。正如我所说,我相信当您之后重新启用它们时会发生错误。
  • 感谢您的评论,但我无法禁用所有外键。你能帮我解决这个问题吗?

标签: sql-server database tsql


【解决方案1】:

您将需要删除约束。或者,使用DELETE FROM

EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable @command1='Delete ?',@whereand='and Schema_Id=Schema_id(''info'')'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?'
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多