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



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

Invoke-Sqlcmd : The pipeline has been stopped.
At D:Scriptspowersehelscript.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:ScriptsMyScript.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'的对象转换为类型",但我不知道为什么会发生此转换问题

如果任何阅读本文的人正在寻找其他结论,我遇到了完全相同的PowerShell相同错误问题,并且它被研磨到单个地理列。 我只是编写一些代码来抓取表并每周导出一次,以便于用户参考。添加类型解决方案并没有改变我的结果。 对我有用的是,在SQL cmd中,使用CAST(mygeocol AS varchar(100))。 方便的是,在SQL和PS中,它恢复了"POINT(-90.1234 30.1234)"这样的格式,并且效果很好。 希望它对某人有所帮助!

相关内容

最新更新