sql-server - Invoke-SQLCMD 无法在 PowerShell 中运行多个 SQL 语句
问题描述
我无法从 Invoke-sqlcmd 运行 2 个 SELECT 语句。
$sql ="
select SERVERPROPERTY('ProductVersion') Version
select SERVERPROPERTY('ProductLevel') ServicePack, SERVERPROPERTY('edition') Edition"
$server = 'SomeServerName'
Invoke-Sqlcmd -ServerInstance $server -Query $sql
只有第一个 TSQL 语句返回结果。
注意:我可以重写 TSQL 来做一条语句。那不是重点。原始脚本有多个 TSQL 命令。此外,我可以为每个语句执行单独的 invoke-sqlcmd 调用。但是,我试图了解这是否是invoke-sqlcmd 的限制。
这是预期的行为吗?
非常感谢。
解决方案
你已经得到了一个有效的答案,但这更多的是对正在发生的事情的解释......
基本上,您遇到的是显示/格式问题,而不是 Invoke-SqlCommand 的问题。
在您的示例中,您的屏幕输出可能如下所示:
PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql
Version
-------
15.0.2070.41
PS> _
注意表格后面的3 个空行——第一个空行实际上是第二个 sql 命令的结果!
当 PowerShell 格式化项目表时,它使用第一个项目来决定要显示哪些列 - 第一个命令的结果只包含一个“版本”列,所以这就是表包含的所有内容。第二个命令的结果没有“版本”列,因此 PowerShell 在该列中显示一个空值,但它也不会为您在表中添加“服务包”或“版本”列。
您可以通过使用以下内容指定列名来覆盖它:
PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql | format-table Version, ServicePack, Edition
Version ServicePack Edition
------- ----------- -------
15.0.2070.41
RTM Developer Edition (64-bit)
PS> _
请注意,现在表格后面只有2 个空白行,因为第二个结果已被隐藏。
如果您在循环中分别输出这两个结果,PowerShell 将显示两个单独的表,并决定在每个表中分别显示哪些列,因此您可以根据@Dan Guzman 的回答得到这个:
Version
-------
15.0.4023.6
ServicePack Edition
----------- -------
RTM Developer Edition (64-bit)
推荐阅读
- java - 如何将数据从一个类传递到另一个类
- javascript - 为什么第一个函数给我结果,而第二个函数只给我未定义的结果?
- java - 如何在 Windows 10 Eclipse 上安装 JavaFX?
- c++ - 读取访问冲突 C++
- gdb - 使用 gdbserver --multi 运行文件
- amazon-web-services - 不使用堡垒的另一个 vpc 的私有子网中的 ssh ec2 实例
- javascript - .includes(或我应用的任何其他方法)不是函数
- python - 如何通过使用 n 个元素的总和来减少 numpy 数组的维度?
- java - 是否可以在 TestNG 数据提供程序类中注入变量
- nlp - 如何使用 NLP(如 fasttext)获取文本的一般类别?