Dynamic SQL Where条件,在Powershell脚本中

问题描述 投票:0回答:1

我正在使用Powershell脚本,其中Qury1的输出是查询2的条件供稿,但未获取供稿,如果有人请参见并告诉我可能的解决方案。还请注意,在实际环境中,两个查询都在不同的实例上运行,并且没有链接服务器的可能性下面的例子是我在冒险工作数据库中尝试过的]

$instance="WIN2016-SQL01\SQLSERVER_01"
$database = "AdventureWorks2014"
$query1 = "SELECT TOP 10 [BusinessEntityID]   FROM [AdventureWorks2014].[Person].[BusinessEntityAddress] where BusinessEntityID < 10 order by 1 "
$Q1 = (invoke-sqlcmd -query $query1 -ServerInstance $instance -Database $database)

$query2 = "SELECT *   FROM [AdventureWorks2014].[Person].[Person] where BusinessEntityID in ($Q1)"
$Q2 = invoke-sqlcmd -query $query2 -ServerInstance $instance -Database $database 
sql-server powershell sql-scripts
1个回答
1
投票
或者您可以只构建一个分隔的字符串来代替您的IN子句:

0
投票
值列表可以作为XML参数传递到查询,在XML中可以使用XML方法提取值。 JSON字符串值是SQL 2016及更高版本中的一个选项,但我发现您使用的是SQL Server 2014。

下面的示例将BusinessEntityID值的Q1结果列表转换为XML参数值。由于Invoke-SqlCmd不支持参数化查询,因此有必要直接使用SqlClient对象。 Invoke-SqlCmd的替代方法是dbatools的Invoke-DbaQuery,如果有可用的话,它支持参数化查询。

© www.soinside.com 2019 - 2024. All rights reserved.