【问题标题】:How to diagnose this exception from Invoke-Sqlcmd?如何从 Invoke-Sqlcmd 诊断此异常?
【发布时间】:2013-08-06 18:53:20
【问题描述】:

我正在运行以下命令(我能想到的最小的可重现示例):

Invoke-Sqlcmd "select * from sys.databases"  | %{
    Invoke-Sqlcmd "select 1"     
}

我收到以下错误:

Invoke-Sqlcmd : 找不到任何适合 指定文化或中性文化。确保 “pipeline.resources”已正确嵌入或链接到程序集中 “System.Management.Automation”在编译时,或者说所有的 所需的附属程序集是可加载和完全签名的。在线:1 字符:1 + Invoke-Sqlcmd "select * from sys.databases" | %{ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidResult: (:) [Invoke-Sqlcmd],MissingManifestResourceException + FullyQualifiedErrorId : ExecutionFailed,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

累了:

  • 同时使用 ISE 和命令行
  • 提升(“以管理员身份运行”)和不提升
  • 针对 SQL 2012 和 SQL 2008
  • 来自 Windows 8 和 Server 2008

在所有情况下,结果都是一样的。

为什么以及如何诊断?

【问题讨论】:

  • 我试图了解select 1 的意义。第一个Invoke-Sqlcmd 对我有用,我可以通过管道打印数据库名称。但是,我在使用 select 1 时看到了同样的错误
  • @SrikanthVenugopalan 我相信这是两者的结合。选择 1 显然可以自己正常工作。

标签: powershell powershell-3.0 sqlps


【解决方案1】:

我还注意到使用invoke-sqlcmd 通过管道将invoke-sqlcmd 命令链接在一起的问题。一种似乎解决问题的解决方法,将第一个命令的输出保存到变量,然后通过管道输出到下一个 invoke-sqlcmd 调用。

$databases = Invoke-Sqlcmd "select * from sys.databases"  
$databases | % { Invoke-Sqlcmd "select 1" }

【讨论】:

  • 是的,这就是我最终的结果。看起来 Invoke-Sqlcmd 不太可重入,嗯?
  • invoke-sqlcmd 还有其他几个问题。一个更严重的问题是错误处理,invoke-sqlcmd 会悄悄地吞下错误。谨慎使用invoke-sqlcmd:connect.microsoft.com/SQLServer/feedback/details/779320/…
  • 是的,我也注意到了其他一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多