Résumé
SQL Server ne vous laisse pas insérer une valeur explicite dans une colonne d'identité à moins que vous n'utilisiez une liste de colonnes. Ainsi, vous avez les options suivantes :
- Faites une liste de colonnes (manuellement ou à l'aide d'outils, voir ci-dessous).
OU
- faire la colonne d'identité dans
tbl_A_archive
un régulier, non-identité colonne : Si votre table est une table d'archives et que vous spécifiez toujours une valeur explicite pour la colonne d'identité, pourquoi avez-vous besoin d'une colonne d'identité ? Utilisez simplement un int normal à la place.
Détails sur la solution 1
Au lieu de
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table
SELECT *
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
vous devez écrire
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table (field1, field2, ...)
SELECT field1, field2, ...
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
avec field1, field2, ...
contenant les noms de toutes les colonnes de vos tableaux. Si vous voulez générer automatiquement cette liste de colonnes, jetez un coup d'oeil à Réponse de Dave o Réponse d'Andomar .
Détails sur la solution 2
Malheureusement, il n'est pas possible de simplement "changer le type" d'une colonne int d'identité en une colonne int de non-identité. En gros, vous avez les options suivantes :
- Si le tableau d'archives ne contient pas encore de données, supprimez la colonne et ajoutez-en une nouvelle sans identité.
OU
- Utilisez SQL Server Management Studio pour définir le
Identity Specification
/ (Is Identity)
de la colonne d'identité dans votre table d'archives pour No
. Dans les coulisses, cela créera un script pour recréer la table et copier les données existantes, donc, pour ce faire, vous devrez également désactivez Tools
/ Options
/ Designers
/ Table and Database Designers
/ Prevent saving changes that require table re-creation
.
OU
0 votes
J'ai déjà installé un serveur lié d'ailleurs !
4 votes
J'ai aussi ce problème, sauf que le "insert into X select * Y" n'était pas un problème jusqu'à ce que je change le schéma de la table.