Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 合并并返回一个id_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 合并并返回一个id

Sql server 合并并返回一个id,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我试图创建一个过程,当找到与输入值匹配的行时,它返回该行ID,如果没有找到匹配的行,它将插入值并输出插入的ID。ID是一个标识列 我一直试图修改以下代码假字段,但我不认为我可以在这段代码中做我想做的事情 CREATE PROCEDURE [dbo].[upsertProc] @ID varchar(20), @Input varchar(20) AS MERGE INTO table USING (S

我试图创建一个过程,当找到与输入值匹配的行时,它返回该行ID,如果没有找到匹配的行,它将插入值并输出插入的ID。ID是一个标识列

我一直试图修改以下代码假字段,但我不认为我可以在这段代码中做我想做的事情

    CREATE PROCEDURE [dbo].[upsertProc]
        @ID    varchar(20),
        @Input varchar(20)
    AS
        MERGE INTO table
    USING 
        (SELECT @Input AS 'Input', @ID AS 'ID') AS Query
        -- Search predicates
        --
        ON Query.ID = table.ID
    WHEN MATCHED THEN
        -- Update part of the 'UPSERT'
        --  
        UPDATE SET
            table.Input=Query.Input
    WHEN NOT MATCHED THEN
        -- INSERT part of the 'UPSERT'
        --
        INSERT (Input) VALUES(Query.Input);
    RETURN 0

有没有办法制定这种程序?

在程序的末尾添加以下内容:

SELECT SCOPE_IDENTITY()

它将与合并的插入和更新部分一起工作。

到底什么不起作用?合并支持。将Inserted.ID输出到@tableVariable中,然后返回它。我解决了一个类似的问题,在这里使用MERGE进行upsert时要小心。它可能导致死锁,显然是出于设计@BaconBits我一直在尝试各种方式的输出,甚至你的例子总是返回一个错误。这是将OUTPUT INSERT.ID插入@tableVariable VALUESQuery.Input的正确方法吗@t-clausen.dk-提供的程序不可能更新超过1个值。它只接受1个ID作为输入,作者声明ID是一个标识列。经过进一步测试,该解决方案开始返回错误的ID,在更新部分,它开始返回NULL或最后一个已知的输入ID。