我有一个表,我需要将记录从回复制到自身。作为其中的一部分,我想使用 OUTPUT 子句将新行捕获到表变量中,这样我就可以在同一进程中对行执行其他操作。我希望每一行都包含它的新键和它从中复制的键。这是一个人为的例子:
INSERT
MyTable (myText1, myText2) -- myId is an IDENTITY column
OUTPUT
Inserted.myId,
Inserted.myText1,
Inserted.myText2
INTO
-- How do I get previousId into this table variable AND the newly inserted ID?
@MyTable
SELECT
-- MyTable.myId AS previousId,
MyTable.myText1,
MyTable.myText2
FROM
MyTable
WHERE
...
如果 INSERT 上的列数与 SELECT 语句中的列数不匹配,SQL Server 就会发出声音。因此,如果我向 MyTable 添加一列,我可以看到这会如何工作,但这不是一个选项。以前,这是使用导致性能瓶颈的游标实现的——我故意试图避免这种情况。
如何复制这些记录,同时保留复制行的键以实现最高性能?