déplacer des données d'une table à une autre avec une structure de table différente

sql sqlbulkcopy sql-server-2008

Question

Je crée une application de téléchargement de données générique où l'utilisateur crée la structure de la table et télécharge les données.

J'ai une table de données générique. avec la structure suivante.

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

Maintenant, l’utilisateur crée un modèle et télécharge les données au format csv pour ce modèle.

supposons que l'utilisateur ait créé le modèle suivant.

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

et insérez les données comme suit

TemplateOne

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

Je souhaite déplacer ces données vers une table de données générique comme suit.

   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

J'essaie de développer un SQL dynamique pour les mêmes. Je veux juste savoir s’il existe un moyen plus facile de le faire.

Si oui, veuillez suggérer.

Réponse populaire

Je suppose que vous pouvez utiliser l’ INSERT INTO SELECT pour copier les données de table1 vers table2 .

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

Le document est ici:
http://www.w3schools.com/sql/sql_insert_into_select.asp


Votre code SQL pourrait ressembler à ceci:

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

J'espère que cela t'aides.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi