2010-09-22 6 views
20

je le tableau suivantlignes de copie de la même table et mettre à jour la colonne ID

alt text

J'ai inséré produit B et il me donne une carte d'identité de 15

J'ai la table de définition qui est la suivante.

alt text

Je veux sélectionner les lignes de ProductDefinition où ProdID = 14 et reproduire le même et l'insérer pour ProdID = 15 comme ce qui suit

alt text

Comment y parvenir en utilisant le code SQL ?

+0

Quelle saveur SQL? MySQL, MSSQL, Oracle? –

+0

Micrsoft SQL Server. – kalls

+1

est ce devoir? –

Répondre

42
INSERT INTO ProuctDefinition (ProdID, Definition, Desc) 
SELECT 
    xxx, Definition, Desc 
FROM 
    ProductDefinition 
WHERE 
    ProdID = yyy 

Le xxx est votre nouveau ProdID et yyy est votre ancien. Cela suppose également que DefID est renseigné automagiquement sur INSERT.

+0

c'est correct. – user29964

+0

Vous pourriez envelopper la requête dans une boucle (avec un nombre spécifique, bien sûr) –

3

Peut utiliser MERGE sur SQL Server 2008, a l'avantage d'utiliser OUTPUT pour renvoyer les valeurs DefID, en supposant qu'ils sont générés automatiquement par ex.

MERGE INTO ProductDefinition 
USING (
     SELECT 16, P1.Definition, P1.Description 
     FROM ProductDefinition AS P1 
     WHERE P1.ProdID = 15 
    ) AS source (ProdID, Definition, Description) 
ON 0 = 1 
WHEN NOT MATCHED THEN 
    INSERT (ProdID, Definition, Description) 
    VALUES (ProdID, Definition, Description) 
    OUTPUT inserted.DefID, inserted.ProdID, 
      inserted.Definition, inserted.Description; 
7

Cela fonctionnera avec n'importe quelle colonne que vous choisissez. Pas seulement clé primaire/ID.

INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5) 
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName 
WHERE CustomID='OrigValue' 
2

si vous voulez sélectionner tous les éléments (en état de la table ne contient pas toutes les clés primaires)

INSERT INTO [tabelName] 
SELECT * FROM [tabelName] 
WHERE (YourCondition) 

en état la table contient une clé primaire, sélectionnez uniquement les colonnes comme pas de clé primaire :

INSERT INTO [tabelName] 
SELECT col_1,col_2,col_n FROM [tabelName] 
WHERE (YourCondition) 
1

Si vous souhaitez répliquer les données dans cette logique même utilisation de la table:

Tout d'abord, insérez statment où vous voulez insérer ...

insert into [table](column1,column2) 

En second lieu, sélectionnez statment d'où vous souhaitez prendre des données pour l'insertion ....

select (column1/'your value',column2/'your value') from [table] 

filtre maintenant définir les lignes que vous voulez pour dupliquer

where (your condition) 

comme vouloir reproduire les mêmes données pour différents clients j'ai utilisé cette requête.

0

Si votre identifiant est pas autoIncrement ou d'une séquence déclarée et si u ne veux pas créer une table temporaire:

vous pouvez utiliser:

INSERT INTO Tabel1 SELECT ((ROW_NUMBER() OVER (ORDER BY ID )) + (SELECT MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value` 
Questions connexes