Sql server 合并并返回一个id
我试图创建一个过程,当找到与输入值匹配的行时,它返回该行ID,如果没有找到匹配的行,它将插入值并输出插入的ID。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
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。