SQL插入IDENTITY ID的行ID

3
我想知道是否有一种直接的方法将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;

有一些故障,例如由于该行可能引用自身等原因。


{btsdaf} - Dmitrij Kultasev
它能够正常运行,但会使脚本变得更长且存在错误的风险,尤其是因为示例被简化了,还有一些需要区分的情况。 - Oak_3260548
减少错误风险的一种方法是使用Sequences。去查一下吧。 - Renato Afonso
{btsdaf} - Dmitrij Kultasev
{btsdaf} - Oak_3260548
1个回答

2
您可以使用“AFTER INSERT”触发器来完成此操作。在自引用的情况下,将该列保留为空,并由触发器将该列设置为“IDENTITY”列的值。
伪代码如下:
- 将表与“inserted”连接,并过滤出SID为空的行 - 对于这些行,更新表并将SID设置为ID
如果无法使用NULL值,在应该完全没有引用的情况下,可以使用另一个存根值。例如,如果ID始终为正,则可以使用-1。在这种情况下,应用上述工作方式,并将NULL替换为-1。

{btsdaf} - Oak_3260548
{btsdaf} - TT.
{btsdaf} - Oak_3260548

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接