2010-05-25 7 views
0

quand je fais cette demande, j'ai une erreurProbleme avec incrément identifiant

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

je veux augmenter mon id

+1

Supprimez les guillemets simples. Et dites-nous la base de données SQL que vous utilisez - MySQL? Serveur SQL? Postgres? Oracle? – Oded

+1

Vous ne devez jamais affecter une clé primaire comme celle-ci, en particulier si plusieurs clients peuvent accéder à la base de données à la fois, car cela peut entraîner la duplication d'ID. La plupart des systèmes DB fournissent des séquences ou des champs auto-incrémentés que vous devriez utiliser. – RoToRa

Répondre

1

essayer

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

Cependant .. être très prudent avec ce ..si 2 opérations font cela en même temps, vous obtiendrez un double

vous pouvez faire (sur SQL Server au moins) envelopper dans une transaction et spécifier ces verrous

INSERT INTO FR_METIERPUBLI(
    D_NIDMTR, 
    D_NIDPUBLI) 
    SELECT MAX(D_NIDMTR) +1, 1000 FROM FR_METIERPUBLI with (UPDLOCK, HOLDLOCK) 

Pourquoi n'utilisez-vous pas une séquence ou une identité?

+0

@Mercer, faites particulièrement attention à cette partie: Pourquoi n'utilisez-vous pas une séquence ou une identité? – HLGEM

+0

@HLGEM comment l'utiliser? – Mercer

+0

Dépend de la base de données que vous utilisez. Ce sont des choses spécifiques à la base de données, mais la plupart des bases de données ont un moyen d'incrémenter automatiquement un champ d'id de quelque sorte. – HLGEM

1

sans connaître la base de données, cela est juste une supposition, mais essayez ceci:

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

pour SQL Server, essayez de protection contre aucune ligne existantes en utilisant ceci:

INSERT INTO FR_METIERPUBLI 
     (D_NIDMTR,D_NIDPUBLI) 
    SELECT 
     ISNULL(MAX(D_NIDMTR),0)+ 1, 1000 
     FROM FR_METIERPUBLI 
+0

content que vous avez posté. J'étais sur le point de faire un idiot de moi-même. –