0

我有这样的关系:

在此处输入图像描述

WhereCurrentVersionID指向游戏的当前活动版本。

在属性ArcadeGameVersionGameID指向关联的ArcadeGame记录。

问题是,我无法插入任何一条记录:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_ArcadeGame_ArcadeGameVersions". The conflict occurred in database "Scirra", table "dbo.ArcadeGameVersions", column 'ID'.

这是一个格式错误的数据结构吗?否则,克服这个问题的最佳解决方案是什么?

4

2 回答 2

0

看起来很糟糕。我看不出你为什么需要这个循环引用。我将只使用一个带有附加字段 CurrentVersion 和 UploadDate 的表 ArcadeGame。例如,您可以根据需要根据 UploadDate 查询它。如果您从该数据库中解释您想要什么,答案可能会更具体。

于 2013-06-12T13:39:54.987 回答
0

如果您需要这种结构,则此结构可以工作。假设 ID 是身份字段,我相信您需要分 5 个步骤执行此操作:

  1. 为 CurrentVersionId 插入带有空值的 ArcadeGame 记录
  2. 使用如下语句确定刚刚添加的记录的 ID 值:SELECT @arcadeGameId = SCOPE_IDENTITY()
  3. 插入 ArcadeGameVersion 记录,将 GameID 设置为上一步中确定的值
  4. 确定刚刚添加的记录的 ID 值(再次使用 SCOPE_IDENTITY())
  5. 更新 ArcadeGame 记录(其中 ID 与步骤 2 中确定的匹配)并将 CurrentVersionId 设置为上一步中确定的值。

您将(很可能)希望在事务中执行上述操作。

如果 ID 不是身份字段并且您提前知道值,您可以按照与上述相同的步骤进行大部分操作,但跳过 SELECT SCOPE_IDENTITY() 步骤。

于 2013-06-12T13:53:11.047 回答