我有一个合并语句,应该始终更新或插入单个记录。我想记住变量中的句子ID。看上去像这样:2 w( Q; _) k& P# w! s
DECLARE @int intMERGE dbo.table AS AUSING (SELECT 'stringtomatch' AS string) AS B ON B.string= A.stringWHEN MATCHED THEN UPDATE SET somecolumn = 'something'WHEN NOT MATCHED THEN INSERT VALUES ('stringtomatch something')OUTPUT @int = inserted.ID;现在这不起作用,因为你不能这样设置输出句子@int。我知道我可以创建一个模板模板并使用 INTO @temptable 但是因为我 6 ]8 z& T8 I* C3 M$ l( K0 K知道 它总是一个记录,所以我希望它会ID包含在INT变量中。有可能吗?或者我被迫使用表变量。我希望我只是缺一些语法。: f0 \& o# H5 T E* g% K
6 Q7 F3 E8 B0 m解决方案: 8 b. U* h+ } A# _5 O6 c 不,你必须在那里OUTPUT使用表变量6 e* E' W+ h K1 G# V
但是,您可以执行此操作… . d r4 ~* x8 J9 V...WHEN MATCHED THEN UPDATE SET @int = ID, somecolumn = 'something'WHEN NOT MATCHED THEN INSERT VALUES ('stringtomatch something');SET @int = ISNULL(@int,SCOPE_IDENTITY());在UPDATE中分配一直是SQL; t( A0 ?' A7 Y4 r/ Y# s" ^" q
Server有效语法。也请参见MSDN上的MERGE。双方都这么说: 9 e& Y! a! B0 e% \…! T% W0 U; B( Q# @, R" \; O" q
::=) @) S% t& G' c4 @5 v, E
SET" r( o7 t4 W3 _
…0 g8 d' [8 c; u8 j" c
@变量=表达式