我的要求是將系統生成的CSV文件加載到SQL表中。下面我提供了CSV文件,表格查詢和我的代碼。使用PowerShell將表列匹配到SQL加載CSV
以下是CSV文件abc.csv
和xyz.csv
哪一列每次都像列表中的第二個文件一樣變化,正如您可以看到最後兩列進行混洗。
id,Name,name,Shift,Day,Night 1,ert,sdf,08/21/2017 Day,2,- 2,wer,asdf,08/21/2017 Day,-,1 3,rty,adsf,08/21/2017 Day,1,- 4,yui,adsf,08/21/2017 Day,-,- 5,qwe,asdf,08/21/2017 Day,-,- 6,ret,asdf,08/21/2017 Day,-,- 7,chh,asdf,08/21/2017 Day,-,- 8,sdf,cxvv,08/21/2017 Day,1,-
id,Name,name,Shift,Night,Day 1,ert,sdf,08/21/2017 Day,-,2 2,wer,asdf,08/21/2017 Day,1,- 3,rty,adsf,08/21/2017 Day,-,1 4,yui,adsf,08/21/2017 Day,-,- 5,qwe,asdf,08/21/2017 Day,-,- 6,ret,asdf,08/21/2017 Day,-,- 7,chh,asdf,08/21/2017 Day,-,- 8,sdf,cxvv,08/21/2017 Day,-,1
下面是創建表查詢的SQL加載此數據:
CREATE DATABASE MES;
USE MES;
CREATE TABLE MESdata
(
Id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
Employee_id int NOT NULL,
First_Name varchar(20) NOT NULL,
Last_Name varchar(20) NOT NULL,
Shift varchar(20) NOT NULL,
Day int NULL,
Night int NULL
);
以下爲使用Out-datatable.ps1
和write-datatable.ps1
我在PowerShell中嘗試:
. C:\ReadCSV\Out-datatable.ps1;
. C:\ReadCSV\write-datatable.ps1;
if (Test-Path Variable:\my_import) {
Remove-Variable my_import
}
$csvfile = 'C:\ReadCSV\abc.csv'
$header = Get-Content 'C:\ReadCSV\abc.csv' | select -First 1
$sqlTable = 'MESdata'
$DataSource = 'HOST\INSTANCE'
$DataBase = 'MES'
$my_import = Import-Csv -UseCulture -Header $header $csvfile |
select @{Label="Employee_id";Expression={$_."id"}},
@{Label="First_Name";Expression={$_."Name"}},
@{Label="Last_Name";Expression={$_."name"}},
@{Label="Shift";Expression={$_."Shift"}},
@{Label="Day";Expression={$_."Day"}},
@{Label="Night";Expression={$_."Night"}} |
Out-DataTable
Write-DataTable -ServerInstance $DataSource -Database $DataBase -TableName $sqlTable -Data $my_import
#$ConnectionString ='Data Source={0}; Database={1}; Trusted_Connection=True;' -f $DataSource,$DataBase
#$bulkCopy = New-Object Data.SqlClient.SqlBulkCopy($ConnectionString)
#$bulkCopy.DestinationTableName = $sqlTable
#$bulkCopy.WriteToServer($my_import)
我第一個錯誤:
Exception calling "WriteToServer" with "1" argument(s): "Column 'Employee_id' does not allow DBNull.Value." At C:\ReadCSV\stackoverflow.ps1:25 char:1 + $bulkCopy.WriteToServer($my_import) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidOperationException
我該怎麼辦?我是否需要更改表格字段的數據類型,但我不想那樣。但是,如果我將所有不爲null替換爲null,那麼該腳本將執行而不會出錯,但會包含所有NULL數據。
你不需要這樣做'-Header $ header',我懷疑它導致你的問題。 –
這就是說我認爲你會遇到一個問題,因爲PowerShell不區分大小寫,所以有兩列名爲「Name」。 –