Re: [SQL ] 如何在insert完取得此筆資料的id

看板Database作者 (yin6705)時間15年前 (2010/11/24 23:57), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1CxJNYkR (Database)
文章代碼(AID): #1CxJNYkR (Database)