我有一个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)"这样的格式,并且效果很好。 希望它对某人有所帮助!