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.
我想知道,是否有直接的方法将 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.