我們有一個鍵字段的表,其中包含密鑰序列,即當前值另一個表,插入你需要一個新的記錄:SQL Server的更新/選擇鍵順序
UPDATE seq SET key = key + 1
SELECT key FROM seq
INSERT INTO table (id...) VALUES (@key...)
今天,我一直在調查碰撞,並已發現不使用交易上面的代碼並行運行引起的衝突,但是,換了UPDATE
和SELECT
線不會引起衝突,即:
SELECT key + 1 FROM seq
UPDATE seq SET key = key + 1
INSERT INTO table (id...) VALUES (@key...)
任何人都可以解釋,爲什麼? (我對更好的方式不感興趣,我將使用事務,並且我不能更改數據庫設計,我只是對爲什麼觀察我們所做的事情感興趣。)
我正在運行兩條線的SQL作爲單個字符串,使用C#的SqlConnection
,SqlCommand
和SqlDataAdapter
。
爲什麼不使用Auto_Increment? SQL Sever將其保存在緩衝區中,因此不存在衝突。 –
@ key被分配了一個值在哪裏? – Glenn
@BrianHoover正如我在問題中所說的,我無法更改數據庫設計。 –