我正在尝试使用 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
}
DataTableConnect 是一个模块,其中$path = C:\Users\Administrator\Desktop\TestFolder\testfile.txt
包括这脚本和.org/2119 脚本。
我不太确定我的问题出在哪里,所有单独的部分似乎都工作正常,我认为唯一的问题可能是$DataTable
返回一堆system.data.datarow
。然而其他 stack-exchange 问答说这是预料之中的。
谢谢,非常感谢您的帮助。
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:我将所有列的数据类型更改为文本(或 varchar s),现在确实可以正确导入。因此,它似乎确实将列/数据导入为(纯)文本。