我有一個包含2列的簡單表 - 名稱和主鍵id。當我插入一個值時,我希望能夠直接在我的代碼中檢索值。獲取插入值的主鍵
所以我必須:
db.Execute("INSERT INTO table(name) VALUES (@0)",name);
id列不自動填充和行存儲。
那麼我該如何才能db.Query();
這個值的時候名稱不是唯一的呢?這可能嗎?
一個有趣的問題,我覺得:)
我有一個包含2列的簡單表 - 名稱和主鍵id。當我插入一個值時,我希望能夠直接在我的代碼中檢索值。獲取插入值的主鍵
所以我必須:
db.Execute("INSERT INTO table(name) VALUES (@0)",name);
id列不自動填充和行存儲。
那麼我該如何才能db.Query();
這個值的時候名稱不是唯一的呢?這可能嗎?
一個有趣的問題,我覺得:)
您可以將部件添加到您的插入返回使用@@IDENTITY
身份:
INSERT INTO table(name) VALUES (@0); SELECT @@IDENTITY;
更新:由於自@@IDENTITY
作品在評論中所指出全球範圍內,你應該實際使用SCOPE_IDENTITY()
代替限制到當前範圍:
INSERT INTO table(name) VALUES (@0); SELECT SCOPE_IDENTITY();
然後您可以檢索通過用ExecuteScalar()
執行插入操作並抓取結果來確定主鍵/身份。
我同意,但是使用IDENTITY_SCOPE,因爲它更適合手頭的問題。 INSERT INTO表(名稱)VALUES(@ 0); SELECT @@ IDENTITY; – 2012-03-20 22:18:58
@Roberto ...我認爲你的意思是SCOPE_IDENTITY():-) – 2012-03-20 22:20:47
@RobertoHernandez:你是對的,那將是更好的方法,更新回答 – BrokenGlass 2012-03-20 22:24:10
使用db.ExecuteScalar
並在您的SQL語句末尾添加SELECT SCOPE_IDENTITY()
以檢索主鍵。
你會想要使用SCOPE_IDENTITY()
禁止一些不尋常的情況。例如:
INSERT INTO table(name) VALUES (@0); SELECT Scope_Identity();
爲什麼不能@@身份?因爲在許多情況下它可能是錯誤的。 MSDN docs describe它爲:
@@ IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT是 類似的功能,它們返回插入 表的標識列中的最後一個值。
@@ IDENTITY和SCOPE_IDENTITY將返回當前會話中任何表中生成的最後一個標識值 。但是,SCOPE_IDENTITY 僅在當前範圍內返回值; @@ IDENTITY不是 僅限於特定範圍。
您的id列設置爲AUTO_INCREMENT嗎? – hkf 2012-03-20 22:15:16
的確,是的。 – 2012-03-20 22:16:18
[如何插入記錄並使用單個SqlCommand返回新創建的ID?](http://stackoverflow.com/questions/330707/how-to-insert-a-record-and-return-the -newly-created-id-using-a-single-sqlcommand) – jrummell 2012-03-20 22:18:46