Copier une ligne dans le même tableau

Donnée SQL (MS SQL 2008):

SET IDENTITY_INSERT MyTable ON
GO
INSERT INTO MyTable
  SELECT * FROM MyTable
  WHERE Id = @SomeId
GO
SET IDENTITY_INSERT MyTable OFF

Il en résulte:
An explicit value for the identity column in table 'MyTable' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Bien, ai-je vraiment besoin de définir une liste de colonnes? Il n'y a pas moyen de le garder générique? E. g. si un développeur ajoute une colonne plus tard, cette colonne ne va pas dans cette routine, et il a même échouera si la valeur null n'est pas autorisé...

La vraie question est, pourquoi voulez-vous créer une ligne en double dans la table?
Bien sûr, le PK ne devrait pas être un doublon. L'idée principale est de créer de nouvelles entrées avec les données existantes, qui sera ajusté ultérieurement.
La création de doublons, où la seule différence est la valeur de la colonne IDENTITÉ est tout aussi inutile. Vous devriez de toute façon avoir une autre contrainte sur l'entreprise colonnes de clé, sinon vous êtes juste de remplir votre table avec redondant ordures.
Tout processus qui n'est pas une importation de grandes quantités de données historiques à partir d'un autre système est mal conçu, si vous avez besoin d'être en train de identity_insert. L'identité _insert est censé être une tâche administrative, seulement cela n'est fait que par des personnes compétentes administrateurs de bases de données. C'est une très mauvaise pratique est à l'aide de select * from toute la production de code.
merci pour votre remarque. Je ne me suis tourné sur parce que je pensais que c'était la raison de l'erreur, mais à l'évidence il a été le manque de liste avec des colonnes. Je n'ai pas vraiment besoin si je voudrais définir les colonnes.

OriginalL'auteur sl3dg3 | 2011-06-22