如何在 SQLCMD 中将数组作为变量传递
How to pass array as variable in SQLCMD
我试图在 sql 脚本中传递服务器名称,但它不起作用。
请帮助
SQL 脚本 patch_report.sql
,我 运行 通过 powershell 给出错误
SELECT * from table where server in ('$(trimsqlstr)')
错误
Msg 102,level Level 15, State 1, Server DBserver, Line 1
Incorrect syntax near 'server1'.
$DB_server = 'DBserver'
$serverName = "server1
server2
server3
"
$serverName = $serverName -split "\n" | foreach {$_.ToString().TrimEnd()}
$trimsqlstr = foreach($server in $serverName){
if ($serverName.Indexof($server) -eq $($serverName.Length-1)){
"'$Server'"
} else {
"'$Server',"
}
SQLCMD.exe -v trimsqlstr = "$($trimsqlstr)" -E -S $DB_server -W -i patch_report.sql
我期待这样的结果
SELECT * from table where server in ('server1','server2','server3')
您可以使用以下代码:
$DB_server = 'DBserver'
$serverName = "server1
server2
server3
"
$serverName = $serverName -split "\n" | foreach {$_.ToString().TrimEnd()}
ForEach($server in $serverName)
{
$serverstring = $serverstring+"'"+$server+"'"+","
}
$trimsqlstr = $serverstring.Substring(0, $serverstring.Length-4)
然后在如下查询中使用 $trimsqlstr
SELECT * from table where server in ($trimsqlstr)
接受的答案是一个很好的解决方案,我只想向您指出 -join
运算符。
-join
运算符对于将数组成员连接到字符串非常实用。
你可以这样做:
$serverNames = "server1
server2
server3
"
$serverNameArray = $serverNames -split "\n" | foreach {$_.ToString().TrimEnd()} | Where-Object {$_} | foreach {"'$_'"}
$whereClause = $serverNameArray -join ','
$selectQuery = "SELECT * from table where server in ($whereClause)"
Where-Object {$_}
正在删除空元素。
我试图在 sql 脚本中传递服务器名称,但它不起作用。 请帮助
SQL 脚本 patch_report.sql
,我 运行 通过 powershell 给出错误
SELECT * from table where server in ('$(trimsqlstr)')
错误
Msg 102,level Level 15, State 1, Server DBserver, Line 1
Incorrect syntax near 'server1'.
$DB_server = 'DBserver'
$serverName = "server1
server2
server3
"
$serverName = $serverName -split "\n" | foreach {$_.ToString().TrimEnd()}
$trimsqlstr = foreach($server in $serverName){
if ($serverName.Indexof($server) -eq $($serverName.Length-1)){
"'$Server'"
} else {
"'$Server',"
}
SQLCMD.exe -v trimsqlstr = "$($trimsqlstr)" -E -S $DB_server -W -i patch_report.sql
我期待这样的结果
SELECT * from table where server in ('server1','server2','server3')
您可以使用以下代码:
$DB_server = 'DBserver'
$serverName = "server1
server2
server3
"
$serverName = $serverName -split "\n" | foreach {$_.ToString().TrimEnd()}
ForEach($server in $serverName)
{
$serverstring = $serverstring+"'"+$server+"'"+","
}
$trimsqlstr = $serverstring.Substring(0, $serverstring.Length-4)
然后在如下查询中使用 $trimsqlstr
SELECT * from table where server in ($trimsqlstr)
接受的答案是一个很好的解决方案,我只想向您指出 -join
运算符。
-join
运算符对于将数组成员连接到字符串非常实用。
你可以这样做:
$serverNames = "server1
server2
server3
"
$serverNameArray = $serverNames -split "\n" | foreach {$_.ToString().TrimEnd()} | Where-Object {$_} | foreach {"'$_'"}
$whereClause = $serverNameArray -join ','
$selectQuery = "SELECT * from table where server in ($whereClause)"
Where-Object {$_}
正在删除空元素。