SQL插入ID来自正在插入的行的IDENTITY ID

时间:2017-10-23 09:00:55

标签: sql sql-server scope-identity

我想知道,如果有直接的方式将ID(在带有IDENTITY(1,1)的ID列中生成)插入到另一列中。 换句话说,我正在寻找SCOPE_IDENTITY()我可以在插入时获取,而不是提交INSERT之后。

我有一个表,其中有一个带有辅助ID(SID)的列,它引用同一个表中的行,在某些特殊情况下它引用自身。 我知道这样做的唯一方法是在这些情况下执行INSERT并因此更新SID。简化示例:

DECLARE @ID INT
INSERT INTO Table (SID) VALUES (NULL);
SELECT @ID = SCOPE_IDENTITY();
UPDATE Table SET SID = ID WHERE ID = @ID;

有一些小故障,即由于该行可能会或可能不会引用自身等等。

1 个答案:

答案 0 :(得分:1)

您可以使用AFTER INSERT触发器执行此操作。如果是自引用,请将列保留为NULL并使触发器将列设置为等于IDENTITY列。

在伪:

  • 使用inserted加入表格,过滤SID为空的
  • 对于这些行,请更新表并设置SID = ID

如果无法使用NULL值,则应该可以根本没有引用,可以使用另一个存根值。例如。如果ID始终为正,则为-1。在这种情况下,应用上述工作方式并将NULL替换为-1。