當我做到這一點要求我有一個錯誤Probleme ID爲增量
INSERT INTO FR_METIERPUBLI(
D_NIDMTR,
D_NIDPUBLI
)
VALUES (
'SELECT MAX(D_NIDMTR) FROM FR_METIERPUBLI + 1', 1000
我想增加我的ID
當我做到這一點要求我有一個錯誤Probleme ID爲增量
INSERT INTO FR_METIERPUBLI(
D_NIDMTR,
D_NIDPUBLI
)
VALUES (
'SELECT MAX(D_NIDMTR) FROM FR_METIERPUBLI + 1', 1000
我想增加我的ID
嘗試
INSERT INTO FR_METIERPUBLI(
D_NIDMTR,
D_NIDPUBLI)
SELECT MAX(D_NIDMTR) +1, 1000 FROM FR_METIERPUBLI
但是.. 非常小心這個 ..如果2操作做到這一點的同時,你會得到至少一式兩份
你可以做的(上的SQL Server )將其包裹在交易中並指定這些鎖
INSERT INTO FR_METIERPUBLI(
D_NIDMTR,
D_NIDPUBLI)
SELECT MAX(D_NIDMTR) +1, 1000 FROM FR_METIERPUBLI with (UPDLOCK, HOLDLOCK)
爲什麼不使用序列或標識?
不知道的數據庫,這只是一種猜測,但試試這個:
INSERT INTO FR_METIERPUBLI
(D_NIDMTR,D_NIDPUBLI)
SELECT
MAX(D_NIDMTR)+ 1, 1000
FROM FR_METIERPUBLI
爲SQL Server,試圖防範利用這個現有的任何行:
INSERT INTO FR_METIERPUBLI
(D_NIDMTR,D_NIDPUBLI)
SELECT
ISNULL(MAX(D_NIDMTR),0)+ 1, 1000
FROM FR_METIERPUBLI
很高興你發佈。我正要讓自己變成白癡。 – 2010-05-25 14:54:59
刪除單引號。並告訴我們你正在使用的SQL數據庫--MySQL? SQL服務器? Postgres的?甲骨文? – Oded 2010-05-25 14:53:00
你不應該像這樣分配一個主鍵,尤其是如果你的數據庫可以被多個客戶端一次訪問,因爲這可能導致重複ID。大多數DB系統提供您應該使用的序列或自動遞增字段。 – RoToRa 2010-05-25 14:58:15