4 votes

SQL Server - Incrémentation automatique sur une table générée

Voici ce que j'essaie de faire:

SELECT * INTO new_table FROM old_table WHERE 1=2;
ALTER TABLE new_table ADD CONSTRAINT pk_new_table_id PRIMARY KEY(id);
SET IDENTITY_INSERT new_table ON

Essentiellement, je veux créer une nouvelle table basée sur la structure d'une existante, puis activer l'incrémentation automatique pour le champ ID. Cependant, lorsque j'essaie d'insérer des lignes, j'obtiens ceci:

La table 'new_table' n'a pas la propriété d'identité. Impossible d'effectuer l'opération SET.

Est-ce que quelqu'un pourrait m'éclairer sur ce que je fais mal ou sur la manière dont je devrais réellement procéder?

7voto

Remus Rusanu Points 159382

La table que vous créez n'a pas de colonne d'identité. Si vous inspectez le code que vous avez posté, vous remarquerez qu'aucune identité n'est déclarée nulle part. Je pense que vous confondez le concept de PRIMARY KEY et de IDENTITY. Ils sont distincts et sans lien. Vous ne pouvez pas créer une table avec une colonne d'identité en utilisant SELECT ... INTO ...

2voto

sam yi Points 1890

La colonne doit être spécifiée avec l'option "identity(1,1)". Le premier 1 est le point de départ et le second est l'incrément.

2voto

sam yi Points 1890

Set identity_insert on ne fait pas réellement ce que vous pensez qu'il fait. Il désactive l'auto-incrément (temporairement) afin que vous puissiez y insérer des valeurs en dur.

Voici plus d'informations à ce sujet... http://msdn.microsoft.com/fr-fr/library/aa259221(v=sql.80).aspx

1voto

sam yi Points 1890

Tout d'abord, vous devez créer la nouvelle table sans utiliser "select ... into" et spécifier la colonne comme une colonne d'identité.

Utilisez "set identity_insert .. on" avant de copier les données. Ensuite, "set identity_insert ... off" lorsque vous avez terminé.

Si vous voulez tricher sur la première partie, vous pouvez utiliser le studio de gestion. Cliquez avec le bouton droit sur la table originale... allez dans le concepteur. Ajoutez l'option d'identité pour la colonne souhaitée. Ensuite, enregistrez le script sans le valider. Vous voudrez peut-être manipuler le script nouvellement généré pour créer la nouvelle table. Il existe d'autres solutions plus sophistiquées si vous devez le faire régulièrement. Mais c'est de loin la plus simple.

0voto

pistipanko Points 406

Ici pourrait être le problème :

ALTER TABLE new_table ADD CONSTRAINT pk_new_table_id PRIMARY KEY(id, idColumn);

Spécifiez la colonne id.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X