Проблема с увеличением идентификатора - PullRequest
0 голосов
/ 25 мая 2010

когда я делаю этот запрос, у меня появляется ошибка

INSERT INTO FR_METIERPUBLI(
D_NIDMTR,
D_NIDPUBLI
)
VALUES (
'SELECT MAX( D_NIDMTR ) FROM FR_METIERPUBLI + 1', 1000

Я хочу увеличить свой идентификатор

Ответы [ 2 ]

1 голос
/ 25 мая 2010

попробуй

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)

Почему вы не используете последовательность или тождество?

1 голос
/ 25 мая 2010

не зная базы данных, это всего лишь предположение, но попробуйте это:

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
...