2010-04-29 5 views
3

j'ai essayé quelque chose comme ça, mais l'identifiant ne change pas, obtenir de la valeur pour le premier enregistrement et définir la valeur pour tous les autres ...je veux insérer des valeurs de table1 à table2 avec une valeur incremantal

insert into table1 (Id,b,c,d) 
(select (select max(Id)+1 from table1),x,y,z from table2 where...) 
+0

Quel produit de base de données utilisez-vous? Serveur SQL? Oracle? Autre chose? –

+1

im en utilisant mssql 2005 pour celui-ci. – adnanturken

+1

Vous savez que cela ne va pas être concurrentiel (sans verrouiller table1), n'est-ce pas? –

Répondre

6

Utilisez un identity column. Ensuite, vous pouvez simplement faire ceci:

INSERT INTO table1 (b, c, d) 
SELECT x, y, z 
FROM table2 
WHERE ... 

Si vous ne souhaitez pas utiliser une colonne auto-incrément, vous pouvez obtenir le même effet en utilisant ajoutant le numéro de ligne de la ligne au lieu d'ajouter toujours 1. Cette syntaxe fonctionne dans presque toutes les bases de données SQL grand public (pas MySQL cependant):

INSERT INTO table1 (Id, b, c, d) 
SELECT 
    (SELECT MAX(Id) FROM table1) + ROW_NUMBER() OVER (ORDER BY x), 
    x, y, z 
FROM table2 
WHERE ... 
+0

merci .. cela a fonctionné – adnanturken

Questions connexes