【发布时间】:2020-07-30 12:41:13
【问题描述】:
我创建了一个名为 KS_Invoicing 的表,但是以下 powershell 脚本不允许我导入 NULL 值。任何想法为什么?
$database = 'Database'
$server = '192.168.1.1'
$table = 'KS_Invoicing'
$path = '\\hmks01\c$\temp\'
$CSVs = get-childitem $path -Filter *.csv
foreach ($c in $CSVs){
Import-CSV $path$c | ForEach-Object {
$_.PSObject.Properties | Foreach-Object {$_.Value = $_.Value.Trim()}
$column1= $_."Column One"
if ($column1) {
$query= "insert into "+$table+" VALUES ('"+$column1+"')"
Invoke-Sqlcmd -Database $database -ServerInstance $server -Query $query -U ks -Password ks2020
}
}
Move-Item $path$c "\\hmks01\c$\temp\Archive"
}
【问题讨论】:
-
无法将值“”转换为类型“System.DateTime”。错误:“字符串未被识别为有效的日期时间。”在 line:12 char:1 + $column1= $_."Column One" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
-
我看不出
System.DateTime来自哪里。您是在新的 Powershell 会话中执行代码还是之前使用过一些变量?在我看来,$_."Column One"是一个空字符串(""不是$NULL),$column1的类型是System.DateTime... -
它是一个新的 powershell 窗口。我以前使用过以下内容,但是当 .csv 文件中的单元格为空白时,似乎不起作用 $column1= $_."Column One" -replace '[ ](?=[ ])|[^-,A-Za-z0-9 ]+' for datetime $column1= $."Column One" -replace '[^\p{L}\p{Nd}///}/_] ', ''
-
很高兴有人帮我创建了一个新的 .ps 脚本。基本上 .csv 可能有包含空白数据(空值)的列。在数据库表中,该列设置为 Allow Nulls
-
您没有显示 CSV 的配置方式。 Import-Csv 确实允许导入具有空字段的行。这是一个常见的现象。我刚刚创建了一个 3 列 3 行的示例文件,第 2 列是空的,可以正常导入。
标签: powershell null ssms import-csv