回答

收藏

如何使用INSERT语句的OUTPUT获句获得标识值?

技术问答 技术问答 111 人阅读 | 0 人回复 | 2023-09-13

假如我有一个插入语句,例如:
6 \8 D, q( F: c/ \, b2 aINSERT INTO MyTable(    Name, Address, PhoneNo)VALUES(  'Yatrix Address Stuff 如何使用OUTPUT子句设置@varINT新行的标识值(称为Id)?例如,我已经看到了将军INSERTED.Name将其放入表变量中,但我不能将其放入非表变量中。
4 X4 R& i; }: E! E- N8 }我试过OUPUT INSERTED.Id AS @var,,SET @var = INSERTED.Id但都没用。: g/ p! ?. J; ^; z; ~7 d
                                                                1 m8 H9 r" q3 G* d% B
    解决方案:                                                               
4 L9 @% |! m% |" O                                                                你可以这样插入新插入ID输出到SSMS控制台:8 @5 {8 O' b$ A$ X' C
INSERT INTO MyTable(Name,Address,PhoneNo)OUTPUT INSERTED.IDVALUES ('Yatrix','1234 Address Stuff','1112223333')当您需要将ID回到调用应用程序时,也可以C#中使用它-
4 {( n" h8 N2 ?- U: S4 m, x2 M只需使用.ExecuteScalar()(不是.ExecuteNonQuery())执行SQL查询以读取ID返回结果即可。
" R% G  I2 {# D# }% w' S或者,如果需要捕获新插入,IDT-SQL内部(如以后进一步处理)需要创建表变量:: f, M9 x/ f' U$ ~) X
DECLARE @OutputTbl TABLE (ID INT)INSERT INTO MyTable(Name,Address,PhoneNo)OUTPUT INSERTED.ID INTO @OutputTbl(ID)VALUES ('Yatrix','1234 Address Stuff','1112223333')这样,您就可以将多个值放入其中@OutputTbl并进一步处理。你也可以。#temp在此处使用“常规”临时表()或什至“真实”持久表作为您的“输出目标”。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则