我试图用PowerShell将CSV文件导入数据库,但到目前为止我没有运气。
这是我的代码(基于此来源):
Start-job -Name 'ImportingData' `
-InitializationScript {Ipmo DataTableConnect -Force -DisableNameChecking} `
-ScriptBlock {$DataImport = Import-Csv -Header ("heading01","heading02","heading03") -Path $path
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance SERVER -Database DB_NAME -TableName TB_NAME -Data $DataTable
}
其中$path = C:\Users\Administrator\Desktop\TestFolder\testfile.txt
DataTableConnect是一个模块,它包括这个脚本和.org / 2119脚本。
我不确定我的问题在哪里,所有单个部件似乎都工作得很好我认为可能唯一的问题就是$DataTable
返回一堆问题system.data.datarow
。然而,其他堆栈交换问答表明这是预期的。
谢谢,非常感谢任何帮助。
EDIT01:我没有得到任何错误或没有任何错误。我在.ps1文件中编写代码,然后通过PowerShell 2运行它。
我只是注意到,如果我在没有工作的情况下运行它,(因此代码看起来像这样):
Ipmo DataTableConnect -Force -DisableNameChecking
$DataImport = Import-Csv -Header ("heading01","heading02","heading03") -Path $path
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance SERVER -Database DB_NAME -TableName TB_NAME -Data $DataTable
我得到了很多错误:
Write-DataTable:Write-DataTable:System.Management.Automation.MethodInvocationException:使用“1”参数调用“WriteToServer”的异常:“数据源中String类型的给定值无法转换为指定的类型日期目标栏。“ ---> System.InvalidOperationException:数据源中String类型的给定值无法转换为指定目标列的类型日期。---> System.FormatException:无法将参数值从String转换为DateTime。---> System.FormatException:String未被识别为有效的DateTime。
文本文件中的所有列都是有效的,并且对应于sql列的数据类型。它是否给我这个错误,因为它将所有内容导入为文本?如果是这样,我该如何避免这种情况?
EDIT02:我将所有列的data_types更改为text(或varchar),实际上它现在可以正确导入。因此,它似乎确实将列/数据导入为(普通)文本。