Powershell调用SQLcmd查询参数不一致?

Powershell调用SQLcmd查询参数不一致?,powershell,invoke-sqlcmd,Powershell,Invoke Sqlcmd,如果以前有人问过这个问题,我表示歉意。在我写这篇文章的时候,我无法在这个网站上找到这种行为的地址 在powershell中使用Invoke-SQLcmd时,会出现不一致的情况。我在脚本调用时从用户处接收SQL连接参数。在这个测试脚本中,我有两个查询。两个调用使用相同的变量 此操作有效并返回数据库的名称 $ConnectQuery = "SELECT DBName = DB_NAME()" Invoke-Sqlcmd -ServerInstance $SQLServer -D

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

在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()"
SELECT DBName = DB_NAME()
以防万一有人问

$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   

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

如果我这样做:

$ConnectQuery01=“从[dbo].[test.csv]中选择*”

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

然后我会这样做:

写入主机$MyResult。|格式表

我得到了我期望的表格结果。这与第一次调用“invokeSqlcmd”的行为有很大不同,因此,我相信根据预期的返回,会有不同的返回行为。我可能错了。如果你有更好的解释,请告诉我


谢谢您的关注。

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

如果我这样做:

$ConnectQuery01=“从[dbo].[test.csv]中选择*”

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

然后我会这样做:

写入主机$MyResult。|格式表

我得到了我期望的表格结果。这与第一次调用“invokeSqlcmd”的行为有很大不同,因此,我相信根据预期的返回,会有不同的返回行为。我可能错了。如果你有更好的解释,请告诉我


谢谢您的关注。

您确定
[dbo].[test.csv]
中有数据吗?如果您使用SSMS作为同一用户查询表,是否会得到行?是的,我使用SSMS和SQLcmd.exe,两者都返回插入到该表中的单行数据。好的,我想我已经找到了缓解这种行为的方法。如果我这样做:$MyResult=Invoke Sqlcmd-ServerInstance$SQLServer-Database$SQLDBName-Username$SQLUsername-Password$SQLPassword-Query$connectquery01如果使用SSMS以同一用户的身份查询表,您确定
[dbo].[test.csv]
中有数据吗,你得到行了吗?是的,我使用SSMS和SQLcmd.exe,并且都返回我插入表中的单行数据。好的,我想我已经找到了缓解这种行为的方法。如果我这样做:$MyResult=Invoke Sqlcmd-ServerInstance$SQLServer-Database$SQLDBName-Username$SQLUsername-Password$SQLPassword-Query$ConnectQuery01
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