当我做到这一点要求我有一个错误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