使用循环外键将记录插入数据库

时间:2013-06-12 13:23:06

标签: sql-server foreign-keys relational-database entity-relationship

我有这种关系:

enter image description here

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

ArcadeGameVersion GameID属性中指向关联的ArcadeGame记录。

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

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

这是一个结构糟糕的数据结构吗?否则,解决这个问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:0)

看起来很糟糕。我不明白为什么你需要这个循环引用。 我只使用一个表ArcadeGame与其他字段CurrentVersion和UploadDate。 您可以根据UploadDate查询它,例如,根据您的需要。如果您从该数据库解释您想要的内容,则答案可能更具体。

答案 1 :(得分:0)

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

  1. 为CurrentVersionId
  2. 插入一个空值的ArcadeGame记录
  3. 使用如下语句确定刚刚添加的记录的ID值:SELECT @arcadeGameId = SCOPE_IDENTITY()
  4. 插入ArcadeGameVersion记录,将GameID设置为上一步中确定的值
  5. 确定刚刚添加的记录的ID值(再次使用SCOPE_IDENTITY())
  6. 更新ArcadeGame记录(其中ID与步骤2中确定的ID匹配),并将CurrentVersionId设置为上一步中确定的值。
  7. 您(很可能)希望在交易中执行上述操作。

    如果ID不是标识字段,并且您提前知道了这些值,则大多数情况下您可以按照上述步骤操作,但跳过SELECT SCOPE_IDENTITY()步骤。