回答

收藏

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

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

假如我有一个插入语句,例如:4 l0 T+ P- H6 n1 Y
INSERT INTO MyTable(    Name, Address, PhoneNo)VALUES(  'Yatrix Address Stuff 如何使用OUTPUT子句设置@varINT新行的标识值(称为Id)?例如,我已经看到了将军INSERTED.Name将其放入表变量中,但我不能将其放入非表变量中。9 p' {  }3 s- L' ?( V& X
我试过OUPUT INSERTED.Id AS @var,,SET @var = INSERTED.Id但都没用。. P; h. K  H+ M
                                                                " p, M# A8 y  y7 \" q% p
    解决方案:                                                                * J. c) W1 ]* M6 X
                                                                你可以这样插入新插入ID输出到SSMS控制台:
0 i# I% W( Q2 @0 g$ MINSERT INTO MyTable(Name,Address,PhoneNo)OUTPUT INSERTED.IDVALUES ('Yatrix','1234 Address Stuff','1112223333')当您需要将ID回到调用应用程序时,也可以C#中使用它-4 [9 _# o8 A- L( O% _% F
只需使用.ExecuteScalar()(不是.ExecuteNonQuery())执行SQL查询以读取ID返回结果即可。" K+ R2 j4 [$ i: f( l4 w& a, `
或者,如果需要捕获新插入,IDT-SQL内部(如以后进一步处理)需要创建表变量:
4 W" U; K# [; ZDECLARE @OutputTbl TABLE (ID INT)INSERT INTO MyTable(Name,Address,PhoneNo)OUTPUT INSERTED.ID INTO @OutputTbl(ID)VALUES ('Yatrix','1234 Address Stuff','1112223333')这样,您就可以将多个值放入其中@OutputTbl并进一步处理。你也可以。#temp在此处使用“常规”临时表()或什至“真实”持久表作为您的“输出目标”。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则