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.
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
Vous devez vous connecter pour publier un commentaire.
Bien, il est en fait une façon plus générique, cela fonctionne bien sans connaître les colonnes:
Cheers!
C'est Fantastique! Signifie que vous pouvez avoir un CopyRow fonction sans maintien de! Thx!
Contente qu'elle te plaise 😉
J'espère que vous n'avez pas l'esprit si j'ai de l'utiliser comme un CopyRow fonction! (Je ne suis pas en tirer profit)
^^ C'est très certainement de l'intérêt commun
OriginalL'auteur sl3dg3
Je ne suis pas MS-SQL utilisateur, mais dans toutes les autres bases de données, j'ai travaillé avec, je n'ai jamais vu une manière qui n'implique pas manuellement la liste de toutes les colonnes, mais l'auto incrémenté de un.
J'ai dit qu'il n'est pas possible et a donné la deuxième meilleure solution. Je suis désolé que vous ne l'aimez pas, mais on ne change pas le fait.
OriginalL'auteur pilif
OriginalL'auteur gbn
D'une grande aide est d'utiliser le script automatique-créateur dans SQL Manager:
Dans mon cas, avoir plus de 60 colonnes, sa douleur à écrire chaque un seul d'entre eux. Donc, clic droit sur le tableau et sélectionnez:
De Script "table" -> "Sélectionner" -> "Nouvelle Fenêtre de Requête"
OriginalL'auteur Dannejaha