【问题标题】:INSERT statement for One to Many relationship一对多关系的 INSERT 语句
【发布时间】:2015-06-15 19:17:31
【问题描述】:

所以我正在开展一个项目来对我的游戏进行编目,但我遇到了一个问题。我有一个包含两个表的数据库,其细分如下:

游戏信息

  • gameId(PK) 是身份(自动增量)
  • 游戏价格
  • 姓名

Game_Notes

  • noteId(PK) 是身份(自动增量)
  • 注释
  • 注意日期
  • gameId(FK)

一个游戏可以有很多注释,因此两个表之间存在一对多的关系,其中“Game_Notes”中名为“gameId”的列是 FK/引用“Game_Information”的主键同名。

现在在 Webmatrix 中,我编写了一个页面,让我可以输入游戏的价格、名称和版本。在同一页面中,我还可以添加有关游戏的注释。在发布时,页面从文本框中获取信息并尝试执行以下操作:

db.Execute("INSERT INTO Game_Information (gamePrice, name, edition) VALUES (@0, @1, @2)", gamePrice, name, edition); 
db.Execute("INSERT INTO Game_Notes(notes, noteDate) VALUES (@0, @1)", notes, noteDate);

现在这可以正常工作并将信息放入正确的表格中,但它会将“Game_Notes”中的 gameId(FK) 留空。

我想要的是“Game_Information”中分配给gameId(PK)的数字反映在“Game_Notes”中的gameId(FK)中。

任何人都可以帮助我或指出我可以阅读的文章吗?谢谢。

-更新- 让问题更清晰。

【问题讨论】:

  • GameID 应该是Game_Information 中的一个身份,但应该是Game_Notes 中的一个外键。
  • 首先你应该创建Store过程,然后使用scope_identity()在GameNotes中插入gameid

标签: c# sql webmatrix


【解决方案1】:

如果我对您的问题的理解正确,那么您正在尝试完成两件事:

  1. 获取Game_Information中新插入记录的gameId
  2. 在 Game_Notes 的以下插入语句中使用该 gameId

虽然有无数种方法可以做到这一点,但使用“输出”值是一种建议。比如:

var id = db.QueryValue("INSERT INTO Game_Information (gamePrice, name, edition) output Inserted.gameId VALUES (@0, @1, @2)", gamePrice, name, edition); 

查看一些帖子了解更多信息:Sql Server return the value of identity column after insert statement

然后,在以下语句中使用该 id:

db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", id, notes, noteDate);

免责声明:我没有对此进行任何测试,只是想为您指明正确的方向。

【讨论】:

  • 感谢Phas1c的帮助。尝试了您的代码,尽管它只是将“1”添加到“Game_Notes”的所有条目中,但这是一个良好的开始阅读。
  • 将 db.Execute 更改为 db.QueryValue 解决了“1”的问题。
【解决方案2】:

您需要在第二个 db.execute 语句中包含 gameId

db.Execute("INSERT INTO Game_Notes(gameId, notes, noteDate) VALUES (@0, @1, @2)", gameId, notes, noteDate);

【讨论】:

  • 我的错误 tshoemake。意味着输入“gamePrice”而不是“gameId”。 gameId 是一个身份。人脑今天炸了。
  • 你应该编辑你的问题,我不再关注你想要的。
  • 更新了问题以使其清楚。为混乱道歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2015-05-17
  • 2014-12-03
  • 2012-07-06
  • 1970-01-01
  • 2010-09-26
  • 2011-07-16
相关资源
最近更新 更多