回答

收藏

使用输出在合并语句中设置变量

技术问答 技术问答 209 人阅读 | 0 人回复 | 2023-09-14

我有一个合并语句,应该始终更新或插入单个记录。我想记住变量中的句子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
    @变量=表达式
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则