【问题标题】:Powershell Invoke-SQLcmd Query argument inconsistent?Powershell Invoke-SQLcmd Query 参数不一致?
【发布时间】:2021-03-12 04:16:36
【问题描述】:

如果之前有人问过这个问题,我深表歉意。在我写这篇文章的时候,我无法在这个网站上找到这种行为。

在 powershell 中使用 Invoke-SQLcmd 时出现不一致。我在用户调用脚本时收到 SQL 连接参数。在这个单一的测试脚本中,我有两个查询。两次调用都使用相同的变量。

这可行并返回数据库的名称。

$ConnectQuery = "SELECT DBName = DB_NAME()"

Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDBName -Username $SQLUsername -Password $SQLPassword -Query $ConnectQuery

这不起作用但不会给我错误但什么也不返回。我检查了变量,它们仍然具有与此查询紧跟前一个查询相同的内容。

$ConnectQuery01 = "SELECT * FROM [dbo].[test.csv]"
    
Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDBName -Username $SQLUsername -Password $SQLPassword -Query $ConnectQuery01

附加说明:

据我了解 Invoke-Sqlcmd 它是一个模块,它提供 Powershell 访问与命令 shell 命令“sqlcmd”相同的功能。所以我尝试使用“sqlcmd”。在这两种情况下,这些命令都有效并返回了预期的数据数据库名称和作为单个测试行的表内容。

在 SQLcmd 可执行文件中:

这些都可以工作并返回预期的数据。

sqlcmd -S <MyDesktopName> -d test -U "<TestAccountName>" -P "<TestPassword>" -q "SELECT DBName = DB_NAME()"
sqlcmd -S <MyDesktopName> -d test -U "<TestAccountName>" -P "<TestPassword>" -q "SELECT * FROM [dbo].[test.csv]"

在 SSMS 中:

这些都可以工作并返回预期的数据。

SELECT DBName = DB_NAME()
SELECT * FROM [dbo].[test.csv]

以防万一有人问

$PSVersionTable

Name                           Value                                                                                                                         
----                           -----                                                                                                                         
PSVersion                      5.1.18362.1171                                                                                                                
PSEdition                      Desktop                                                                                                                       
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                       
BuildVersion                   10.0.18362.1171                                                                                                               
CLRVersion                     4.0.30319.42000                                                                                                               
WSManStackVersion              3.0                                                                                                                           
PSRemotingProtocolVersion      2.3    
SerializationVersion           1.1.0.1   

【问题讨论】:

  • 你确定[dbo].[test.csv]里面有数据吗?如果你用SSMS查询同一个用户的表,会得到行吗?
  • 是的,我使用 SSMS 和 SQLcmd.exe 并且都返回了我在该表中插入的单行数据。
  • 好的,我想我已经找到了减轻这种行为的方法。如果我这样做:$MyResult = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDBName -Username $SQLUsername -Password $SQLPassword -Query $ConnectQuery01

标签: powershell invoke-sqlcmd


【解决方案1】:

好的,我想我已经找到了缓解这种行为的方法。

如果我这样做:

$ConnectQuery01 = "SELECT * FROM [dbo].[test.csv]"

$MyResult = Invoke-Sqlcmd -ServerInstance $SQLServer -Database $SQLDBName -Username $SQLUsername -Password $SQLPassword -Query $ConnectQuery01

然后我这样做:

Write-Host $MyResult. | Format-Table

我得到了我期望的表格结果。这与“Invoke-sqlcmd”的第一次调用有显着不同的行为所以,我相信根据预期返回有不同的返回行为。我在这里可能是错的。如果您有更好的解释,请告诉我。

感谢您的关注。

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 2012-09-13
    • 2014-04-15
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多