PowerShell 中的值不能为空错误
value can not be null error in PowerShell
我正在尝试将我的 csv 文件导入到我的 sql 数据库中,但我不确定为什么它说
Exception calling "ExecuteWithResults" with "1" argument(s): "Value cannot be null.
Parameter name: sqlCommands"
尽管我的 csv 文件中没有 Null 值,而且我确保我的 table 列接受空值。
$s = New-Object Microsoft.SqlServer.Management.Smo.Server "server name"
$db = $s.Databases.Item("LitHold")
$csvfile = import-csv -delimiter ";" -path "C:\scripts\LitHold-OneDrive\output\Return22-01-12-Return.csv"
$csvfile |foreach-object{
$query = "insert into DailyReport VALUES ('$($_.MIN)','$($_.MID)','$($_.UPN)','$($_.Change)','$($_.Type)','$($_.HoldValue)','$($_.OneDrive)','$($_.Mailbox)','$($_.Created)','$($_.Modified)','$($_.MultMID)','$($_.Account)','$($_.ExistOD)')"
}
$result = $db.ExecuteWithResults($query)
# Show output
$result.Tables[0]
我的 csv 文件
//The top one is my columns name and it's already inside my table
"MIN","MID","UPN","Change","Type","Hold Value","OneDrive","Mailbox","Created","Modified","Mult MID","Account","Exist OD"
"338780228","lzlcdg","lzlcdg@NAMQA.COM","Hold Created","OneDrive and Mailbox","Y","https://devf-my.sharepoint.com/personal/lzlcdg_namqa_corpqa_geuc_corp_com","lzlcdg@NAMQA.CORPQA.GEUC.CORP.COM","1/11/2022 11:38:57 AM","1/11/2022 11:38:57 AM","N","",""
"419150027","lzs8rl","lzs8rl@.corpq.com","Hold Created","OneDrive and Mailbox","Y","https://my.sharepoint.com/personal/lzs8rl_namqa_corpqa_gcom","lzs8rl@namqa.corpqa.geuc.corp.com","1/11/2022 11:39:05 AM","1/11/2022 11:39:05 AM","N","",""
不要删除 headers 列,但要仔细检查它们的书写方式.. 使用 空格
你的代码忽略了这里的代码
$($_.HoldValue)
--> $($_.'Hold Value')
$($_.MultMID)
--> $($_.'Mult MID')
$($_.ExistOD)
--> $($_.'Exist OD')
要么保留代码并重写 headers(去掉空格),要么确保根据 headers.
使用 属性 名称
通过删除列 headers,csv 文件中的第一行将用作列 headers,除非您提供带有参数 -Header
的新行。如果多次遇到相同的字段值,删除 headers 将导致问题,因为列 headers 必须是 unique
然后就是这一行:
$result = $db.ExecuteWithResults($csvfile)
应该是
$result = $db.ExecuteWithResults($query)
并且循环遍历 csv 文件的记录并在该循环内 覆盖 您的查询字符串在每次迭代中没有意义,因此只保留最后一条记录...
我正在尝试将我的 csv 文件导入到我的 sql 数据库中,但我不确定为什么它说
Exception calling "ExecuteWithResults" with "1" argument(s): "Value cannot be null.
Parameter name: sqlCommands"
尽管我的 csv 文件中没有 Null 值,而且我确保我的 table 列接受空值。
$s = New-Object Microsoft.SqlServer.Management.Smo.Server "server name"
$db = $s.Databases.Item("LitHold")
$csvfile = import-csv -delimiter ";" -path "C:\scripts\LitHold-OneDrive\output\Return22-01-12-Return.csv"
$csvfile |foreach-object{
$query = "insert into DailyReport VALUES ('$($_.MIN)','$($_.MID)','$($_.UPN)','$($_.Change)','$($_.Type)','$($_.HoldValue)','$($_.OneDrive)','$($_.Mailbox)','$($_.Created)','$($_.Modified)','$($_.MultMID)','$($_.Account)','$($_.ExistOD)')"
}
$result = $db.ExecuteWithResults($query)
# Show output
$result.Tables[0]
我的 csv 文件
//The top one is my columns name and it's already inside my table
"MIN","MID","UPN","Change","Type","Hold Value","OneDrive","Mailbox","Created","Modified","Mult MID","Account","Exist OD"
"338780228","lzlcdg","lzlcdg@NAMQA.COM","Hold Created","OneDrive and Mailbox","Y","https://devf-my.sharepoint.com/personal/lzlcdg_namqa_corpqa_geuc_corp_com","lzlcdg@NAMQA.CORPQA.GEUC.CORP.COM","1/11/2022 11:38:57 AM","1/11/2022 11:38:57 AM","N","",""
"419150027","lzs8rl","lzs8rl@.corpq.com","Hold Created","OneDrive and Mailbox","Y","https://my.sharepoint.com/personal/lzs8rl_namqa_corpqa_gcom","lzs8rl@namqa.corpqa.geuc.corp.com","1/11/2022 11:39:05 AM","1/11/2022 11:39:05 AM","N","",""
不要删除 headers 列,但要仔细检查它们的书写方式.. 使用 空格
你的代码忽略了这里的代码
$($_.HoldValue)
--> $($_.'Hold Value')
$($_.MultMID)
--> $($_.'Mult MID')
$($_.ExistOD)
--> $($_.'Exist OD')
要么保留代码并重写 headers(去掉空格),要么确保根据 headers.
使用 属性 名称通过删除列 headers,csv 文件中的第一行将用作列 headers,除非您提供带有参数 -Header
的新行。如果多次遇到相同的字段值,删除 headers 将导致问题,因为列 headers 必须是 unique
然后就是这一行:
$result = $db.ExecuteWithResults($csvfile)
应该是
$result = $db.ExecuteWithResults($query)
并且循环遍历 csv 文件的记录并在该循环内 覆盖 您的查询字符串在每次迭代中没有意义,因此只保留最后一条记录...