【问题标题】:Invoke-Sqlcmd not working in SQLInvoke-Sqlcmd 在 SQL 中不起作用
【发布时间】:2016-11-01 00:40:42
【问题描述】:

我在 SQL Powershell 中使用以下命令生成 SQL 返回的数据的 csv。

Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation

上述命令在 SQL Power Shell 中运行良好。但是当我尝试使用以下代码从 SQL 运行时

DECLARE @cmd varchar(1000)
SET @cmd = 'Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation'
EXEC xp_cmdshell @cmd

它给出了错误

'Invoke-Sqlcmd' 未被识别为内部或外部命令,

请任何人帮助我从 SQL 运行命令。

谢谢

【问题讨论】:

  • 不工作..同样的错误
  • 对不起,在开始添加 powershell.exe 后,现在出现另一个错误“Export-Csv”不被识别为内部或外部命令,

标签: sql invoke-sqlcmd


【解决方案1】:

xp_cmdmshell 执行 Windows shell 命令,而不是 PowerShell 命令。您当然可以从 Windows shell 中调用 PowerShell,例如:

DECLARE @cmd varchar(1000)
SET @cmd = 'Invoke-Sqlcmd -Query ''myp'' -ServerInstance ''.'' ^| Export-Csv -Path ''d:\data\MyDatabaseSizes.csv'' -NoTypeInformation'
EXEC xp_cmdshell 'powershell.exe -c "' + @cmd + '"'

注意:

  • 我已将 PowerShell 命令中的双引号替换为单引号(为 SQL 转义),因此我可以在 Windows 命令中使用双引号。如果您需要在 PowerShell 中使用双引号,则最好将 PowerShell 脚本放在一个文件中以避免这一切
  • 您可能还需要更多参数(例如设置执行策略)。 This MSDN page 对 PowerShell 命令行开关有更多帮助
  • 命令行参数中的管道字符需要使用^ 进行转义

【讨论】:

  • 您好,当我在 SQL 中执行上述代码时,会出现错误“Export-Csv”不被识别为内部或外部命令,
  • 您需要在命令行中使用插入符号转义管道(如果实际上没有用作外壳管道)。
  • 对不起,我是个菜鸟。但是当我执行您的查询时,我删除了 |特点。在第三行它给了我连接错误。请帮助您能否为我创建一个有效的查询谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2018-07-15
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多