日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

關于獲取SQL Server 2000的自增長字段值

瀏覽:229日期:2023-10-28 08:25:05

原文:Check Your SQL Server Identity來源:sqlservercentral.com作者:Andy Warren

過去的幾個月里,我有幸面試了眾多應聘DBA和DB開發崗位的求職者。我們希望開發人員能夠創建存儲過程,編寫合理的復雜SQL語句,以及觸發器。我喜歡問這些求職者一個問題:

“假設我們使用SQL Server2000進行開發。現在我需要傳遞給存儲過程兩個變量:firstname和lastname。存儲過程負責向名字為TEST的表插入這兩個變量,其中TEST表有兩個字段,名字就叫firstname和lastname。TEST表的主鍵是一個自增長類型的字段,名字叫ContactID。問題是我如何獲取插入的那條數據的主鍵值。”

讓我們想一下答案是什么。你是否知道如何創建存儲過程,獲取數值并返回給調用的應用程序?

有人會直接問我-這個問題重要嗎?對于我來說,我問這個問題的目的是為了測試求職者是否有求解非常規需求的能力。設想一下標準的訂單/訂單明細表應用場景--你是否知道如何不知道訂單主鍵的情況下插入訂單的詳細信息?當你因為沒有使用主鍵時,可能會帶來鎖問題。這時,自增長字段加入是常用的一個手段。但是使用@@Identity來獲取插入數據的標識,有可能會帶來問題,比如在觸發器內使用就會發生問題。這并不是一個可以給出唯一答案的問題,但是這個問題可以讓我們對處理類似表的問題,來展開討論。

我收到了很多不同的回答,但是絕大多數并非最優。幾乎每個人都知道如何插入數據、如何返回值,但是幾乎每個人都在獲取自增長字段取值上回答得不是很好。

錯誤回答 #1 - Select max(contactid) from Test. 因為你無法避免別人也同時在插入數據,因此這個回答是錯誤的。當然,你可以通過提升隔離級別來達到目的,但是這將會大幅降低并發性能,因此不好。

錯誤回答 #2 - Select top 1 contactid from test order by contactid desc. 錯誤的原因和回答#1一樣。

錯誤回答 #3 - 通過插入的數據來組合成一個唯一的標識,從而獲得自增長字段的值。如果插入的數據確實組合起來是唯一的,能達到目的,但是如果不唯一,怎么辦呢?因此這也不是好辦法。

錯誤回答 #4 - 這個回答很接近正解了。這些回答者建議使用@@Identity,自然這是可以的 (小心,要知道如何正確使用@@Identity), 但是當我問他們關于@@Identity的相關技術細節時,我收到最多的答案如下:

- 對不起,我不是很清楚。- 你應該盡快獲取@@Identity的值,因為其它人的對表插入數據,也會改變這個值。- 是的,獲取最后一個identity值,在大多數情況下是可行的,但是如果在TEST表上有觸發器,這個觸發器會自動向別的表插入數據,如果那個表也同樣有一個自增長字段,那么錯誤就會發生。此時,你獲取的@@Identity取值是那個表的identity取值(注意:這個回答正確地描述了 @@Identity的行為)。 正確答案 - 因為我們使用的是SQL Server 2000,因此使用Scope_Identity() , 如果用的是SQL Server 7,那么只有只用@@Identity,并且以output參數方式傳遞(return值一般是用來作為錯誤代碼用)。使用@@Identity意味著將來也許會發生錯誤,例如審核時使用自增長字段。

現在我們來做一系列的試驗來驗證:

create database IdentityTestuse identitytestcreate table TEST (ContactID int not null identity (1, 1), firstname varchar(100) null, lastname varchar(100) null)insert into TEST Default Valuesselect @@Identity

運行后會返回1。如果在此運行,則返回 2。

insert into TEST Default Valuesselect Scope_Identity()

運行后返回 3。

現在我們來設計如何使@@Identity返回錯誤結果。我們先創建一個包含一個新的自增長字段的表TESTHISTORY,然后在TEST表上加觸發器。

create table TESTHISTORY (HistoryID int not null identity (1, 1), ContactID int not null, firstname varchar(100) null, lastname varchar(100) null)create trigger i_TEST on dbo.TEST for insert as

set nocount on

insert into TESTHISTORY (ContactID, FirstName, LastName) select ContactID, FirstName, LastName from Inserted

現在看看會發生什么:

insert into TEST Default Valuesselect @@Identity

返回值為1。注意,此時TEST表最后插入的記錄,主鍵值為4,而TESTHISTORY表作后插入記錄的主鍵值=1。

insert into TEST Default Valuesselect @@Identity

返回值為5。TEST表最后插入記錄的主鍵值為5,而且TESTHISTORY表的確也插入了第二條記錄。現在我們再測試如果同時有別的連接來向插入TEST表插入數據,情況會如何。首先我們用當前的連接,運行:

insert into TEST Default Values

此時,TEST插入了第6條記錄。然后新建一個連接,并運行相同的SQL語句:

insert into TEST Default Values

此時,TEST表插入了第7條記錄。然后我們在原先那個連接里,來獲取“錯誤”的結果,值為3。

select @@Identity

現在我們用scope_identity()來測試。我們希望得到的結果是6,不是7!

select Scope_Identity()

結果確實如此,證明使用scope_identity()是正確的。我知道,這樣測試很麻煩,你也許不會去仔細探究。但是如果你準備使用SQL Server 2000,你就必須知道它是如何工作的。有興趣用這個問題來考考你的開發人員,可以教他們一些專業的開發技巧,這樣也許會使你在將來省卻很多本可以避免的麻煩。

標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩午夜| 久久九九国产| 麻豆一区二区在线| 亲子伦视频一区二区三区| 夜夜嗨一区二区| 久久精品xxxxx| 日韩欧美字幕| 免费的成人av| 欧美国产不卡| 偷拍欧美精品| 国产一卡不卡| 黑人精品一区| 蜜臀久久99精品久久一区二区 | 91综合网人人| 日韩中文字幕不卡| 欧美极品一区二区三区| 国产99久久久国产精品成人免费| 在线精品国产亚洲| 国产成人在线中文字幕| 视频一区视频二区中文字幕| 精品国产午夜肉伦伦影院| 一区在线免费| 精品国产美女a久久9999| 午夜在线视频一区二区区别| 国产精品jk白丝蜜臀av小说| 色婷婷狠狠五月综合天色拍| 亚洲三级视频| 日韩av福利| 亚洲精品美女91| 激情黄产视频在线免费观看| 日本亚洲欧美天堂免费| 久久久国产精品一区二区中文| 日本aⅴ亚洲精品中文乱码| 久久久亚洲一区| 国产精品第一国产精品| 亚洲欧美视频| 日韩国产欧美一区二区| 欧美视频一区| 中文日韩在线| 免费高潮视频95在线观看网站| 日韩欧美久久| 欧美日韩一区二区综合| 久久中文字幕一区二区| 久久亚洲图片| 久久久久国产| 久久av中文| 蜜桃一区二区三区在线观看| 日韩和的一区二在线| 国产精品尤物| 快she精品国产999| 精精国产xxxx视频在线播放| 国产精品流白浆在线观看| 性一交一乱一区二区洋洋av| 久久男人av资源站| 久久不卡日韩美女| 日韩精品三区四区| 在线看片不卡| 天堂中文在线播放| 精品国产亚洲一区二区三区| 日本麻豆一区二区三区视频| 日韩网站在线| 亚洲国内精品| 蜜桃av.网站在线观看| 精品国产亚洲一区二区三区在线| 日韩亚洲精品在线观看| 亚洲男女自偷自拍| 婷婷亚洲综合| 亚洲二区视频| 一本大道色婷婷在线| 精品国产鲁一鲁****| 欧美在线黄色| 蜜桃一区二区三区在线观看| 伊人久久亚洲美女图片| 亚洲午夜黄色| 999久久久亚洲| 欧美天堂视频| www.com.cn成人| 国产精品久久观看| 成人国产精品一区二区免费麻豆| 国产精品日本一区二区不卡视频| 日韩在线麻豆| 亚洲日本免费电影| 一本综合精品| 亚洲乱码久久| 亚洲香蕉视频| 视频一区日韩精品| 夜夜嗨av一区二区三区网站四季av| 欧美日韩中文一区二区| 99精品在线观看| 欧洲在线一区| 激情自拍一区| 狠狠色综合网| 日韩中文字幕麻豆| 亚洲天堂av资源在线观看| 蜜芽一区二区三区| 亚洲精品欧美| 午夜精品影视国产一区在线麻豆| 亚洲精品麻豆| 91精品国产自产观看在线| 久久国产精品免费一区二区三区| 日韩一区二区三免费高清在线观看| 老鸭窝毛片一区二区三区| 久久亚洲精品伦理| 日韩激情综合| 国产精品最新| 精品国产a一区二区三区v免费| 精品久久在线| 日韩啪啪电影网| 欧美精品一区二区久久| 午夜在线播放视频欧美| 影音先锋久久精品| 国产色99精品9i| 精品视频国产| 国产在线|日韩| 国产亚洲午夜| 奇米狠狠一区二区三区| 国产精品亚洲产品| 电影91久久久| 久久久久美女| 视频在线观看一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩超碰人人爽人人做人人添| 国产极品嫩模在线观看91精品| 97精品中文字幕| 亚洲精品一区二区在线看| 亚州欧美在线| 国产一区国产二区国产三区| 91精品国产乱码久久久久久久| 美女久久网站| 国产精品伊人| 久久婷婷久久| 在线亚洲欧美| 国产精品亚洲二区| 日韩久久一区二区三区| 欧美二区视频| 日韩av一区二区三区四区| 国内不卡的一区二区三区中文字幕 | 久久久国产精品网站| 欧美日韩视频网站| 午夜在线精品偷拍| 国产乱码精品一区二区三区四区| av资源中文在线天堂| 99xxxx成人网| 久久激情av| 日韩成人综合| 日韩一区免费| 精品日韩视频| 日韩成人午夜精品| 日韩在线短视频| 亚洲三级精品| 97欧美在线视频| 一区二区三区四区在线观看国产日韩 | 欧美激情日韩| 亚洲午夜在线| 国产日韩欧美一区二区三区| 久久人人精品| 日本欧美久久久久免费播放网| 日韩成人精品一区二区| 免费在线观看精品| 樱桃视频成人在线观看| 亚洲精品大片| 欧美日一区二区| 国产精品美女久久久久久不卡| 国产99久久| 国产精品白丝一区二区三区| 亚洲精品电影| 久久在线91| 在线精品一区二区| 亚洲伦乱视频| 国产午夜精品一区在线观看| 欧美日韩国产免费观看视频| 国产精品第十页| 亚洲深夜av| 韩国久久久久久| 国产精品综合| 蜜臀av在线播放一区二区三区| 成人自拍av| 国产精品1luya在线播放| 男女激情视频一区| 久久精品青草| 精品视频91| 国产欧美日韩视频在线| 亚洲在线观看| 日韩一区二区三区免费| 国产精品videosex极品| 美国三级日本三级久久99| 欧美片第1页| 国产精品一区二区三区www| 日韩一级欧洲| 久久在线视频免费观看| 精品视频网站| 国产日韩欧美中文在线| 在线看片一区| 99国产精品久久久久久久| 欧洲一级精品| 成人精品动漫一区二区三区| 69堂免费精品视频在线播放| 日韩影院在线观看| 国产一区日韩一区| 国产精品不卡|