截断表后如何添加约束?

Pet*_*e2k 1 sql-server

我正在写一个脚本。这个脚本的目的是

  1. 获取数据库上的所有外键约束。
  2. 截断一个表。
  3. 重新添加已删除的外键约束。

我在再次添加约束时遇到问题 [步骤 3],我相信这是因为我的约束与可用的约束冲突。最初的数据是...

作者表

1   Kenneth Graham  k.graham@twitw.com
Run Code Online (Sandbox Code Playgroud)

书桌

1   The wind in the willows Classic childrens story about woodland animals  123456
Run Code Online (Sandbox Code Playgroud)

作者书籍表

1   1   1
Run Code Online (Sandbox Code Playgroud)

我对 authorbooks 表有以下限制:

ALTER TABLE [dbo].[AuthorBooks]  WITH CHECK ADD  CONSTRAINT [FK_Books_Author_xref_Books] FOREIGN KEY([BookId])
REFERENCES [dbo].[Books] ([ID])
GO
ALTER TABLE [dbo].[AuthorBooks]  WITH CHECK ADD  CONSTRAINT [FK_Books_Author_xref_Authors] FOREIGN KEY([AuthorId])
REFERENCES [dbo].[Authors] ([Id])
GO
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试添加约束时,出现以下错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_Books_Author_xref_Authors”冲突。冲突发生在数据库“PeteDb”、表“dbo.Authors”、“Id”列中。

有什么办法可以解决这个问题并且无论如何都可以添加约束吗?

小智 5

使用 WITH NOCHECK 而不是 WITH CHECK 添加与现有数据冲突的约束。/sf/ask/37095901/

也许您收到错误是因为您“2. Trucate a table”。不是全部?也许您要删除 Authors 或 Books,并在 AuthorBooks 中保留引用这些其他表的记录。