sposta i dati da una tabella ad un'altra tabella con una diversa struttura della tabella

sql sqlbulkcopy sql-server-2008

Domanda

Sto creando un'app di caricamento dati generica in cui l'utente crea la struttura della tabella e carica i dati.

Ho una tabella di dati generica. con la seguente struttura.

--------------------------------------
tableId | ColumName | rowNo | CellData 

ora l'utente crea il modello e carica i dati in formato csv per quel modello.

supponiamo che l'utente abbia creato il seguente modello.

----------------------------------------
colum1 | colum2  | colum3 | colum4

e inserire i dati come segue

TemplateOne

colum1 | colum2  | colum3 | colum4
-----------------------------------
x1     |  x2     |  x3    |  x4   
A1     |  A2     |  A3    |  A4   
B1     |  B2     |  B3    |  B4   

Voglio spostare questi dati nella tabella dati generica come segue.

   tableId  | ColumName | rowNo | CellData 
--------------------------------------
TemplateOne | colum1    |   1   | X1
TemplateOne | colum1    |   2   | A1
TemplateOne | colum1    |   3   | B1
TemplateOne | colum2    |   1   | X2
TemplateOne | colum2    |   2   | A2
TemplateOne | colum2    |   3   | B2
TemplateOne | colum3    |   1   | X3
TemplateOne | colum3    |   2   | A3
TemplateOne | colum3    |   3   | B3  
TemplateOne | colum4    |   1   | X4
TemplateOne | colum4    |   2   | A4
TemplateOne | colum4    |   3   | B4

Sto provando a sviluppare un sql dinamico per lo stesso. Voglio solo sapere se c'è un modo più semplice per farlo.

Se Sì, si prega di suggerire.

Risposta popolare

Immagino che tu possa usare INSERT INTO SELECT per copiare i dati da table1 a table2 .

INSERT INTO table2 (col1,col2 ...)
SELECT col1,col2... FROM table1;

Il documento è qui:
http://www.w3schools.com/sql/sql_insert_into_select.asp


Il tuo SQL potrebbe andare in questo modo:

INSERT INTO generic (tableId, ColumName,rowNo,CellData)
SELECT 'TemplateOne' AS tableId, 'colum1' AS ColumName, rowNo, colum1 AS CellData
FROM TemplateOne
UNION ALL
SELECT 'TemplateOne' AS tableId, 'colum2' AS ColumName, rowNo, colum2 AS CellData
FROM TemplateOne
UNION ALL
SELECT 'TemplateOne' AS tableId, 'colum3' AS ColumName, rowNo, colum3 AS CellData
FROM TemplateOne
UNION ALL
SELECT 'TemplateOne' AS tableId, 'colum4' AS ColumName, rowNo, colum4 AS CellData
FROM TemplateOne;

DEMO: http://sqlfiddle.com/#!2/f3e84a/1

Spero che questo ti aiuti.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow