SQL 从正在插入的行的 IDENTITY ID 中插入 ID

SQL insert ID from IDENTITY ID of the row being inserted

我想知道,是否有直接的方法将 ID(在具有 IDENTITY(1,1) 的 ID 列生成)插入到另一列。 换句话说,我正在寻找 SCOPE_IDENTITY() 我可以在插入 时得到 ,而不是 插入后得到.

我有一个 table,其中有一列具有辅助 ID (SID),它引用来自同一 table 的行,在某些特殊情况下它引用自身。 我知道这样做的唯一方法是在这些情况下执行 INSERT 和 UPDATE SID。简化示例:

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

存在一些问题,即由于该行可能会或可能不会引用自身等事实。

您可以使用 AFTER INSERT 触发器来执行此操作。在自引用的情况下,保留列 NULL 并让触发器将列设置为等于 IDENTITY 列。

伪:

  • 加入table和inserted,过滤SID为NULL的地方
  • 对于这些行,更新 table 并设置 SID = ID

如果不能使用 NULL 值,在应该可以完全没有引用的情况下,您可以使用另一个存根值。例如。 -1 如果 ID 总是正数。在这种情况下,应用上述工作方式并将 NULL 替换为 -1.