2010-09-22 10 views
20

Ho la seguente tabellaCopiare le righe della stessa tabella e aggiornare la colonna ID

alt text

ho inserito prodotto B ad esso e mi dà un ID di 15

Poi ho la tabella di definizione che è la seguente.

alt text

voglio selezionare le righe ProductDefinition dove ProdID = 14 e replicare la stessa ed inserirla per ProdID = 15 come il seguente

alt text

Come realizzare questo codice SQL utilizzando ?

+0

Quale sapore SQL? MySQL, MSSQL, Oracle? –

+0

Micrsoft SQL Server. – kalls

+1

è questo compito? –

risposta

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

Il xxx è il tuo nuovo ProdID e il yyy è vecchio. Ciò presuppone anche che DefID sia popolato automaticamente su INSERT.

+0

questo è corretto. – user29964

+0

È possibile racchiudere la query in un ciclo (con un conteggio specifico, ovviamente) –

3

Può utilizzare MERGE su SQL Server 2008, presenta il vantaggio di utilizzare OUTPUT per restituire i valori DefID, assumendo che siano generati automaticamente, ad es.

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

Funzionerà con qualsiasi colonna selezionata. Non solo chiave primaria/ID.

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

se si desidera selezionare tutti gli elementi (in condizioni la tabella non contiene alcun chiavi primarie)

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

in condizioni La tabella contiene una chiave primaria, selezionare solo le colonne che non chiave primaria come :

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

Se si desidera replicare i dati in uso stesso tavolo questa logica:

In primo luogo, inserire statment in cui si desidera inserire ...

insert into [table](column1,column2) 

secondo, selezionare statment da cui si desidera prendere i dati per l'inserimento ....

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

ora impostare il filtro quali righe si desidera duplicare

where (your condition) 

come voler replicare stessi dati per diversi clienti Ho usato questa query.

0

Se l'ID non è AutoIncrement o la sequenza dichiarati e se u non desidera creare una tabella temporanea:

è possibile utilizzare:

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