Учитывая .csv
файл, Fact.csv
, который, скажем, имеет 7 столбцов
Конечная цель состоит в том, чтобы иметь что-то вроде этого:
script.ps1 Fact.csv 3 4
, в котором первые 3 столбцы, безусловно, имеют тип varchar
, в то время как остальные столбцы (4) имеют тип real
.
Как мне l oop через заголовки файла .csv
(который может содержать данные, но мы не хотим импортировать данные, только заголовки для имен столбцов таблицы), и динамически создать таблицу (имя файла .csv
, например, Fact
) вместе со столбцами таблицы, с типами столбцов, указанными выше числами в базе данных?
псевдокод:
$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]"
}
Более того, нам не нужно указывать 4, если есть способ сообщить Powershell, что только первое x количество столбцов равно varchar
, а остальные real
.