Re: [SQL ] 如何在insert完取得此筆資料的id
※ 引述《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
討論串 (同標題文章)