如何从 csv 文件创建 sql table?

How to create a sql table from a csv file?

给定一个 .csv 文件,Fact.csv,假设有 7 列

最终目标是拥有这样的东西:

script.ps1 Fact.csv 3 4 

其中前 3 列肯定是 varchar 类型,而其余列 (4) 是 real 类型。

如何循环遍历 .csv 文件的 headers(它可以包含数据,但我们不想导入数据,只是列的 headers table 的名称),并动态创建 table(.csv 文件的名称,例如 Fact)以及 table 列,使用上面由数据库中的数字指定的列类型?

伪代码:

$csvfile = .\Fact.csv
$csv = Import-CSV $csvFile
$csvHeaders = ($csv | Get-Member -MemberType NoteProperty).name

Function Query($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=$Server;Initial Catalog=$Database;Integrated Security=SSPI" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.Connection = $SqlConnection 
$SqlCmd.CommandText = $Query 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close() 
$DataSet.Tables[0] }

foreach ($column in $csvHeaders | where 1st $x columns = varchar and remaining columns = real) {
Query "CREATE TABLE [dbo].[$csvfile.name](
    [column1] [varchar](100) NOT NULL,
    [column2] [varchar](100) NOT NULL,
    [column3] [varchar](100) NOT NULL,
    [column4] [real] NULL,
    [column5] [real] NULL,
    [column6] [real] NULL,
    [column7] [real] NULL
) ON [PRIMARY]"

}

更好的是,如果有办法告诉 Powershell 只有前 x 列是 varchar,而其余列是 real,我们就不必指定 4。

这不是一个完整的答案,只是一个指导,显示了一个可能有语法错误的不优雅的暴力方法。有 PS 支枪可能可以将其减少到三行。

扩展你的伪代码:

$csvfile = .\Fact.csv
$csv = Import-CSV $csvFile
$csvHeaders = ($csv | Get-Member -MemberType NoteProperty).name

$query="CREATE TABLE [dbo].[$csvfile.name]( "
$index=1
foreach ($column in $csvHeaders) {
  $query=$query+"[$column] "
  if($index -gt $varcharendposition) {$query=$query+"real, "} else {$query=$query+"varchar(50), "}  
  $index++
}
$query=$query + ") "

Query $query

这将充满错误,但请尝试并在出现时解决每个错误或错误。然后你可以post你的答案并接受它。