【问题标题】:INSERT to parent-child with @@IDENTITY使用@@IDENTITY 插入到父子节点
【发布时间】:2018-08-02 23:52:30
【问题描述】:

我已经阅读了相关的其他问题,但找不到直接答案,所以我希望确认 T-SQL 中插入父母和多对多孩子的最佳(唯一?)方法是通过两个单独的语句作为在http://sqlfiddle.com/#!18/00180/3

请注意,在我的实际情况中,参数包括子表的 TVP,并且 INSERTS 位于带有 TRY -- CATCH 块的存储过程中。关于后者(和TSQL Try / Catch within Transaction or vice versa?)对于像这样简单的事情来说,COMMIT/ROLLBACK 有用还是开销太大?

【问题讨论】:

  • 如果您从多行 TVP 开始,那么我通常使用游标循环我的 TVP,然后在每次插入兴趣表后使用 SCOPE_IDENTITY 插入,然后获取 SCOPE_IDENTIY 的值并使用它插入到 Interest2Currencies。如果您还不了解 SCOPE_IDENTITY,请了解它。
  • 谢谢@SqlSurfer 我不知道stackoverflow.com/questions/1920558/…

标签: sql-server parent-child identity


【解决方案1】:

您不一定必须使用游标,但您必须以某种方式管理identity 字段。如果您尝试同时创建父记录和子记录,则需要在父记录中创建 insert,获取 scope_identity,然后将 scope_identity 输入到子记录中。

如果您尝试插入多条父记录 多条子记录,您的情况会更复杂一些,需要在您的问题中进行一些额外的描述。有可能 - 如果您想在该父表中进行多行插入,您需要有 identity_insert on,并且您将明确管理您的 identity 列(即,在您自己的语句中,而不是依靠identity 属性为您创建它们)。是可以做到的,而且在某些情况下它是非常合适的(游标在 mssql 中仍然是可悲的执行者)。

给我们一个更详细的问题(请提供问题中的代码 - 那里的代码非常基本,确实应该在此处内联),让我们看看您真正要问的是什么。

【讨论】:

  • 感谢您提供的信息,我实际上并没有插入多个父母,所以不需要额外的细节(直到我跨过那座桥:) 但您的洞察力绝对有助于解决我的问题。
猜你喜欢
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
相关资源
最近更新 更多