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