Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:将CSV文件导入SQL server时出错报告_Sql_Sql Server_Powershell_Csv_Error Handling - Fatal编程技术网

Powershell:将CSV文件导入SQL server时出错报告

Powershell:将CSV文件导入SQL server时出错报告,sql,sql-server,powershell,csv,error-handling,Sql,Sql Server,Powershell,Csv,Error Handling,当数据与数据类型不匹配时,如何在SQL server上跳过或说“错误”? 例如ID在SQL server上有nchar(2),我有一个csv文件,其中一个数据是ID的“1234”。 如何在SQL server中为该数据生成错误符号或错误报告。 我可以有关于所有错误的单独excel文件。 我只想知道哪些数据出错了 即使出现错误,也不停止编写脚本 这是我的剧本 $today = (get-date).Date $DataImport = Import-Csv -Path (Get-ChildItem

当数据与数据类型不匹配时,如何在SQL server上跳过或说“错误”? 例如ID在SQL server上有
nchar(2)
,我有一个csv文件,其中一个数据是ID的“1234”。 如何在SQL server中为该数据生成错误符号或错误报告。 我可以有关于所有错误的单独excel文件。 我只想知道哪些数据出错了

即使出现错误,也不停止编写脚本

这是我的剧本

$today = (get-date).Date
$DataImport = Import-Csv -Path (Get-ChildItem filename | where { $_.CreationTime.Date -eq $today } )    
$DataTable = Out-DataTable -InputObject $DataImport
write-DataTable -serverInstance servername -Database DBname -TableName Table name -Data $DataTable

函数
Out DataTable
Write DataTable
已经定义。

您可以使用TRY-and-CATCH

$today = (get-date).Date
TRY
{
$DataImport = Import-Csv -Path (Get-ChildItem filename | where { $_.CreationTime.Date -eq $today } )    
$DataTable = Out-DataTable -InputObject $DataImport
write-DataTable -serverInstance servername -Database DBname -TableName Table name    -Data $DataTable
}
CATCH 
{     
$_.Exception.Message
"PS code here that writes error to txt or to excel."
}

Write DataTable函数使用的是.NET SqlBulkCopy类,与T-SQL批量插入命令或某些数据加载实用程序(如SSIS)不同,它没有提交某些行和记录错误行的选项。您可以将-BatchSize参数改为1而不是50000,这样它将提交每一行,而不是回滚整个批,您可以捕获异常。注意:对于大型数据集,这将较慢

另一种解决方案是使用T-SQL批量插入命令指定错误文件:

$query = "BULK INSERT dbname..table FROM 'C:\temp\test.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', ERRORFILE = 'C:\temp\test.err')"
然后使用invoke-sqlcmd或sqlcmd.exe调用查询。

您看到这个-?