作者yin6705 (yin6705)
看板Database
标题Re: [SQL ] 如何在insert完取得此笔资料的id
时间Wed Nov 24 23:57:19 2010
※ 引述《DearKurt ("小朋友"会自己找出路...)》之铭言:
: ※ 引述《flowwinds (..)》之铭言:
: : 大家好..
: : 我设计一个table, 其 id 是 auto-increment的(也是PK)
: : 希望於INSERT一笔资料完取得此笔资料的 id
: : 有想过每次新增完再 SELECT 出 top 那一笔
: : 不过这样可能会有同步的问题
: : 所以想请教有何种方式能达到这个?
: : 谢谢~
: : ps. 我用的是SQL Server 2005 Express, 语言是 C#
: 除非你取得id是要用於在关联资料表来新增资料
: 不然现在visual studio的做法 预设会把seed跟increment设为-1
: 在client或是程式端 虽然id会显示-1,-2等 但到资料库里id就会自动递补到最後面
: 这样可以避免有时候client在新增id时会与资料库的id冲突
: 如果是用在关联资料表新增资料
: 我的作法 PK不要用auto-increment id改用时间或其他栏位会是唯一的
: 这样可能会比较省事 程式也比较好写
我的习惯是用identity自动编号栏位来当PK,
PK栏位越小,查询速度越快,尤其是要join很多table的时候。
至於其他唯一的栏位就设unique,sql server会建unique index。
关於你的问题,我的作法是
insert 後接着执行 select scope_identity(),
得到的值就是刚才insert table的identity值。
C#程式的写法是
在SqlCommand加入一个 SqlParameter,例如 @ID,
记得设Direction属性为 ParameterDirection.InputOutput
SqlCommand的 CommandText属性值像是
"insert into tblxxx....; select @ID=scope_identity();";
ExecuteNonQuery()後,再抓@ID 的 Value,就是刚才的identity值。
最後一点,我用的都是 Enterprise 或者 Standard版,
Express 版我想应该也适用。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.165.75.202