0

我在 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 运行命令。

谢谢

4

1 回答 1

0

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 脚本放在一个文件中以避免所有这些
  • 您可能还需要更多参数(例如设置执行策略)。 这个 MSDN 页面有更多关于 PowerShell 命令行开关的帮助
  • 命令行参数中的管道字符需要转义^
于 2016-06-29T11:30:55.400 回答