我有一個主鍵,我不想自動增量(由於各種原因),所以我正在尋找一種方法來簡單地增加該字段,當我插入。簡而言之,我的意思是沒有存儲過程並且沒有觸發器,所以只需一系列SQL命令(最好是一個命令)。只需簡單的SQL INSERT即可實現手動增量?
這是我迄今爲止嘗試:
BEGIN TRAN
INSERT INTO Table1(id, data_field)
VALUES ((SELECT (MAX(id) + 1) FROM Table1), '[blob of data]');
COMMIT TRAN;
* Data abstracted to use generic names and identifiers
然而,在執行時,該命令的錯誤,說
「子查詢未在本 背景下僅允許標量表達式。在 允許」
所以,我怎麼能做到這一點/我究竟做錯了什麼?
編輯:由於它被指出作爲一個考慮因素,被插入到的表保證至少有一行已經被保證。
你會推薦他們做什麼呢? – GernBlandston 2009-04-27 18:14:05
由於id字段被索引,性能命中是否顯着?另外,如果包裹在一個事務中,它應該是原子性的,安全的,正確的? – cdeszaq 2009-04-27 18:14:13
我只是不確定在執行SELECT MAX(id)..部分時表是否會被鎖定。如果沒有,那麼有可能兩個線程可以獲得相同的ID。知道SQL服務器好一點的人可以告訴你,如果這實際上是安全的 - 我的直覺是,它不是,但我真的不確定。 – 2009-04-27 18:33:51