我正在尝试从 CSV 文件中读取值,将它们嵌入到 INSERT T-SQL 语句中并使用 Invoke-Sqlcmd 运行该语句。
这是我的代码:
Push-Location; Import-Module SQLPS -DisableNameChecking; Pop-Location
$InsertQry = "insert into $ImportTable VALUES ('`$(Col1)','`$(Col2)','`$(Col3)','`$(Col4)') "
Import-CSV $ImportFile | ForEach-Object { `
$RowData = "Col1=$($_.{My Ref})","Col2=$($_.{General satisfaction})","Col3=$($_.Helpfulness)","Col4=$($_.Effort)"
Invoke-Sqlcmd `
-Database $DBName -ServerInstance $SQLServer `
-Query $InsertQry `
-Variable $RowData
}
该脚本适用于 CSV 文件中包含每列值的行。对我来说不幸的是,CSV 文件中的某些行包含空值(因此可能只有前两列包含值)。这些行无法插入到表中,并生成以下错误:
Invoke-Sqlcmd :用于为 Invoke-Sqlcmd cmdlet 定义新变量的格式无效。请使用 'var=value' 格式定义新变量。
可能为空的列是所有为空或包含单个数字 1 到 5 的列。
我尝试了各种方法来转义该值,将其转换为不同的数据类型,向其添加零或空字符串,将其合并为空,但我无法获得有效的解决方案。
我可以控制目标表,因此我很乐意将零、空字符串、null 或任何其他值作为空值的占位符传递。