Может кто-нибудь помочь с этой проблемой? Я имею в виду пример из Интернета для параллельного выполнения операторов T-SQL.
https://www.mssqltips.com/sqlservertip/3539/complete-common-sql-server-database-administration-tasks-in-parallel-with-powershell-v3-workflow/
Я хочу иметь возможность выполнять один и тот же T-SQL на одном и том же экземпляре одновременно, чтобы подтвердить концептуальную работу по блокировке. Для этого я настроил скрипт так, чтобы я мог выполнить любое количество итераций, изменив
while ($counter -le 5)
Вот полный сценарий. В основном, основным оператором может быть любой T-SQL, который вы хотите, и он заполнит $sqlcmds
, чтобы этот оператор прошел столько итераций, сколько вы пожелаете.
Import-Module sqlps -DisableNameChecking;
Set-Location c:
# create a workflow to run multiple sql in parallel
workflow Run-PSQL #PSQL means Parallel SQL {
Param(
[Parameter(Mandatory=$true)]
[string]$ServerInstance,
[Parameter(Mandatory=$false)]
[string]$Database,
[Parameter(Mandatory=$true)]
[string[]]$Query # a string array to hold t-sqls
)
foreach -parallel ($q in $query) {
Invoke-Sqlcmd -ServerInstance $ServerInstance -Database $Database -Query $q -QueryTimeout 60000;
}
} # Run-PSQL
# prepare a bunch of sql commands in a string arrary
#####new bit to make it dynamic sql multiple times
[string[]]$sqlcmds
$sqlcmds = ""
$counter = 0
do {
"Starting Loop $Counter"
$PrimaryStatement = '"SELECT TOP 1 * FROM sys.objects"'
if ($counter -eq 5) {
$sqlcmds = $sqlcmds + "$PrimaryStatement"
Write-Host "this is what sqlcmds is $sqlcmds loop 5"
} else {
$sqlcmds = $sqlcmds + "$PrimaryStatement,``"
Write-Host "this is what sqlcmds is now $sqlcmds"
}
$counter++
} while ($counter -le 5)
# now we can run the workflow and measure its execution duration
$dt_start = Get-Date; #start time
Run-PSQL -Server &&&&&&& -Database master -Query $sqlcmds;
$dt_end = Get-Date; #end time
$dt_end - $dt_start; # find execution duration
Когда это выполняется, я получаю это сообщение:
Run-PSQL: невозможно связать аргумент с параметром 'Query', поскольку это пустая строка.