无法将“System.DBNull”类型的对象强制转换为“System.Type”类型

时间:2016-06-09 23:09:00

标签: sql powershell

我有一个PowerShell脚本尝试使用 Invoke-Sqlcmd 运行sql命令,但是我得到以下异常:

Invoke-Sqlcmd : The pipeline has been stopped.
At D:\Scripts\powersehelscript.ps1:57 char:9
+ $rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is  null;"  ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], PipelineStoppedException
+ FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptComman
 Invoke-Sqlcmd : Unable to cast object of type 'System.DBNull' to type
'System.Type'.
At D:\Scripts\MyScript.ps1:57 char:9
+ $rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is null;"  ...

我的sql命令如下所示:

$rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is null;" -Database $Database -ServerInstance $SqlServer -Username $U -Password $P

它似乎与数据库连接正常,如果我直接在数据库中运行相同的查询,我会得到结果。

从异常中我看到“无法将'System.DBNull'类型的对象强制转换为类型”,但我不知道为什么会出现这个转换问题

1 个答案:

答案 0 :(得分:1)

万一阅读本文的人在寻找其他结论,我将遇到完全相同的PowerShell相同错误问题,并将其简化为一个地理列。我只是在编写一些代码以获取表并每周导出一次,以方便用户参考。 Add-Type解决方案并没有改变我的结果。对我有用的是在SQL cmd中使用CAST(mygeocol AS varchar(100))。方便的是,在SQL&PS中,它恢复为“ POINT(-90.1234 30.1234)”之类的格式,并且运行良好。希望它能对某人有所帮助!