2017-06-07 2 views
1

J'ai besoin de convertir une requête sur Excel en une insertion sur SQL, je ne vais pas créer une fonction qui fonctionnera sur n'importe quelle requête, et l'invoquer, il doit donc être assez réutilisable.SQL Insert From PowerQuery

let 
    SQL = (TableX as table) => let 
     // Get Columns Name abd use on the columns INSERT 
     SOURCE = TableX, 
     Names = Table.ColumnNames(SOURCE), 
     ListN = Table.FromList(Names), 
     TransposeN = Table.Transpose(ListN), 
     CombineN = Table.CombineColumns(TransposeN,Table.ColumnNames(TransposeN),Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"M"), 
     ColunmsAsText = List.Single(CombineN[M]), 
     // ColumnsasText is all the Columns Name 
     // This part I cant do I need to format all columns acording to the type and Combine They 
     COLUNMS = (ListN as text) => let 
      TYPE = some.function.to.get.type(SOURCE[ListN]), 
      if TYPE = date then FIELDS = FIELDS & "'" & Date.ToText([ListN], "yyyy-MM-dd") & "'," else 
      if TYPE = text then FIELDS = FIELDS & "'" & [ListN] & "'," else 
      if TYPE = number then FIELDS = FIELDS & [ListN] & "," else FIELDS = FIELDS & "#error," 
    in 
     FIELDS 
     INSERT = "INSERT INTO " & "TABLENAME" & " (" & ColunmsAsText & ") VALUES (" & FIELDS & ");", 
     NEWCOLUMNADD = Table.AddColumn(SOURCE, "SQL", each INSERT) 
in 
    NEWCOLUMNADD 
in 
    SQL 

Le problème est la variable des domaines où, je dois composer une chaîne de toutes les colonnes, et la fonction « some.function.to.get.type », et la sortie serai quelque chose comme ça, pour chaque rangée:

INSERT INTO (Column_name1, Column_name2, Column_name3) value (15, '2017-05-20', 'Text hear'); 

Réservoirs pour l'aide.

Répondre

0

Vous voulez Value.Type

Value.Type("abc") = type text