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

时间:2009-11-19 20:36:50

标签: sql sql-server tsql

我有一个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

谢谢!

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题,并在http://sqlblog.com/blogs/adam_machanic/archive/2009/08/24/dr-output-or-how-i-learned-to-stop-worrying-and-love-the-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;

答案 1 :(得分:5)

您必须将@act_map_matrix加入Act以获取“旧”值。

它在INSERT语句中根本不可用

编辑:希望@new_scriptID和“scriptid = 2”可以成为连接列