如何使用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在此处使用“常规”临时表()或什至“真实”持久表作为您的“输出目标”。 |
|
|
|
|
|