3

我想知道,是否有一种直接的方法可以将 ID(在 ID 列中使用 IDENTITY(1,1) 生成)插入另一列。换句话说,我正在寻找 SCOPE_IDENTITY() 我可以在 insert 时获得,而不是INSERT提交之后。

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

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

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

4

1 回答 1

2

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

在伪:

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

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

于 2017-10-23T09:23:03.973 回答