Public/New-SQLImportValuesStatementFromDataTable.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function New-SQLImportValuesStatementFromDataTable {
param([Parameter(Position = 0,ValueFromPipeline)] [System.Data.DataTable]$dataTable
    ,[Parameter(Position = 1)] [string]$FQTableName
    ,$ColumnMetaData
  )
  $SQLCreateTable = ""
  $colNames = $dataTable.Columns | sort -Property Ordinal
  $SQLInsert += "
INSERT INTO $FQTableName ("


  $firstPass = 1
  foreach ($col in $colNames) {

    
    Write-Log "Identifying the data type to use based on the dataTable you passed in" Debug

    $dataType = Get-SQLServerDataTypeFromDataTable -table $dataTable -columnName $col.ColumnName
    if ($firstPass -eq 1) {
      $SQLInsert += "[$(($col.ColumnName).Trim())]"
      $firstPass = 0
    }
    else {
      $SQLInsert += ",[$(($col.ColumnName).Trim())]"
    }
  }
  $SQLInsert = $SQLInsert + ")`n"

  $sqlValues ="Values`n"
  $rowfirstPass = 1
foreach($row in $dataTable.Rows)
{
    if ($rowfirstPass -eq 1) {
    $sqlValues += "("
    $rowfirstPass = 0
    }
    else{
        $sqlValues += ",("
    }
      $firstPass = 1
    foreach ($col in $dataTable.Columns){
        $quoteValue = $true
        if(($ColumnMetaData | where ColumnName -eq $col.ColumnName | measure-object | select -ExpandProperty count) -ne 0 ){
            $quoteValue = ($ColumnMetaData | where ColumnName -eq $col.ColumnName).QuoteValue
        }
        $dataType = Get-SQLServerDataTypeFromDataTable -table $dataTable -columnName $col.ColumnName
        $value = $($row[$col.ColumnName])
        if ($value -eq ''){$value = "NULL"}
        else{
            if($quoteValue){
            $value = "'$($value.Replace("'","''"))'"
            }
            else{
                $value = "$($value.Replace("'","''"))"
            }
        }

        if ($firstPass -eq 1) {
            $sqlValues+= "$value"
            $firstPass = 0
        }
        else{
                $sqlValues += ",$value"
            }
    }
    $sqlValues += ")`n"
    
} 


  Write-Log "$SQLInsert$sqlValues" Debug
  Write-Output "$SQLInsert$sqlValues"
}Export-ModuleMember -Function New-SQLImportValuesStatementFromDataTable