T-SQL输出子句:如何访问旧的身份ID

Jai*_*ime 10 sql t-sql sql-server

我有一个T-SQL语句,基本上执行插入操作并将一些插入的值输出到表变量以供以后处理.

有没有办法让我将所选记录的旧身份ID存储到我的表变量中.如果我使用下面的代码,我得到"多部分标识符"a.ID"无法绑定".错误.

DECLARE @act_map_matrix table(new_act_id INT, old_ID int)
DECLARE @new_script_id int
SET @new_script_id = 1

INSERT INTO Act
(ScriptID, Number, SubNumber, SortOrder, Title, IsDeleted)
OUTPUT inserted.ID, a.ID INTO @act_map_matrix
    SELECT 
        @new_scriptID, a.Number, a.SubNumber, a.SortOrder, a.Title, a.IsDeleted
    FROM Act a WHERE a.ScriptID = 2
Run Code Online (Sandbox Code Playgroud)

谢谢!

Bra*_*AGr 12

我遇到了同样的问题,并在http://sqlblog.com/blogs/adam_machanic/archive/2009/08/24/dr-output-or-how-i-learned-to-stop-worrying-and找到了解决方案-爱最merge.aspx

基本上它会破坏MERGE命令以将其用于插入,因此您可以访问OUTPUT子句中未插入的源字段.

MERGE INTO people AS tgt
USING #data AS src ON
    1=0 --Never match
WHEN NOT MATCHED THEN
    INSERT
    (
        name,
        current_salary
    )
    VALUES
    (
        src.name,
        src.salary
    )
OUTPUT
    src.input_surrogate,
    inserted.person_id
INTO #surrogate_map;
Run Code Online (Sandbox Code Playgroud)


gbn*_*gbn 5

你必须加入回到@act_map_matrixAct获得"旧"值.

它在INSERT语句中根本不可用

编辑:希望@new_scriptID和"scriptid = 2"可以是连接列