[SQLServer] Et pour la table

Je suis sur un nouveau projet et je dois faire vivre une application .NET/Outlook/SQLServer fabriqué à la va-vite et qui tient avec 3 bout de ficelles et un élastique.
Une de mes taches consiste à mettre à jour une table à partir de pleins de fichiers Excel/Texte, j’ai une macro qui me créer des fichiers textes propres et j’ai un package qui s’occuper de m’injecter ces fichiers dans la base. Pour info, j’ai développé la macro mais pas le package.

Mon problème, c’est que ce matin : surprise, ma table n’avait plus aucune entrée et le script de mise à jour n’avait donc plus aucun impact.

C’est l’horreur, j’essaye de remettre des données dans ma table à coup de INSERT INTO mais je me tappe l’erreur suivante :

The insert failed. It conflicted with an identity range check constraint in database 'XXXXXXXX', replicated table 'dbo.INDICATOR_VALUES', column 'IndicatorValueID'. If the identity column is automatically managed by replication, update the range as follows: for the Publisher, execute sp_adjustpublisheridentityrange; for the Subscriber, run the Distribution Agent or the Merge Agent. The statement has been terminated.

Je suis bloqué depuis ce 10h, j’ai parcouru tout MSDN et Google sans succès.

[PS]
Je précise que j’ai la même erreur lorsque j’essaye d’ajouter une entrée à la main, ca ne vient pas d’une erreur dans un code SQL.

Ta colonne IndicatorValueID est bien une colonne identité ? tu fais de la replication ? Tu insères des valeurs en indiquant la valeur de la colonne ID ?

  1. Oui c’est bien une colonne identité.
  2. Qu’entend tu par réplication, je note que je ne suis pas un expert en administration de BDD.
  3. J’ai tenté d’ajouter une entrée à la main et il m’est impossible de modifier la valeur de IndicatorValueID, j’ai aussi tenté dans mon script de l’ajouter avec l’option “SET IDENTITY_INSERT [XXXXXXXX].[dbo].[INDICATOR_VALUES] ON” mais j’ai le même message d’erreur.

Si tu parles bien d’une colonne identité, alors tu dois savoir que tu n’as pas la main sur la manière dont sont générés les valeurs de ces colonnes : la valeur est automatiquement créé lors de l’ajout de la ligne, il ne te faut donc pas chercher à spécifier la valeur toi même.

Si tu cherches à donner explicitement les valeurs, je te conseille de désactiver cette colonne id temporairement, d’insérer tes valeurs puis éventuellement de la réactiver.

[quote=“Styx31, post:4, topic: 31844”]Si tu parles bien d’une colonne identité, alors tu dois savoir que tu n’as pas la main sur la manière dont sont générés les valeurs de ces colonnes : la valeur est automatiquement créé lors de l’ajout de la ligne, il ne te faut donc pas chercher à spécifier la valeur toi même.

Si tu cherches à donner explicitement les valeurs, je te conseille de désactiver cette colonne id temporairement, d’insérer tes valeurs puis éventuellement de la réactiver.[/quote]

Perso, que la valeur de cette colonne soit automatiquement renseigner où non, je m’en fiche, du moment que j’arrive à insérer mes données, mais c’est impossible pour le moment, alors comment faire ?

Desactives la notion d’identity sur cette colonne. Si tu utilises SQL Manager, c’est une propriété Identity sur la colonne qu’il te faut passer à false.

C’est d’ailleurs surement pour ca qu’il parle de replication, parceque sur une DB repliquee, justement, tu geres toi meme “temporairement” au cours de la replication la notion d’identitiee de la colonne B)

J’ai tenté de mettre la valeur ‘Not for replication’ à false dans ma table mais impossible de sauvegarder, voici l’erreur :

‘INDICATOR_VALUES’ table

  • Unable to modify table.
    It is invalid to drop the default constraint on the rowguid column that is used by merge replication.
    The DDL operation failed inside merge DDL replication manipulation.
    The transaction ended in the trigger. The batch has been aborted.

J’ai un peu peur de tout cassé…

[EDIT]
Finalement, j’ai réussi à trouver une sauvegarder complête de la base, je n’ai rien perdu, tout roule comme avant, OUF, je peux retourner bricoler avec du Access, l’administration de SQLServer, c’est pas encore pour moi.