Как выполнить запрос к нескольким экземплярам и базам данных в SQL Server

#sql-server #powershell

#sql-сервер #powershell

Вопрос:

Я хочу автоматизировать перестройку или реорганизацию индекса в нескольких экземплярах и базах данных с помощью powershell. У меня есть запрос ниже:

 $SQLInstances = "Server1", "Server2", "Server3"


$Databses = "Db1", "Db2", "Db3"

  
Foreach ($SQLInstance in $SQLInstances) {

            foreach ($DbName in $Databses)
        {
    
            Invoke-Sqlcmd -ServerInstance $SQLInstance -Database $DBName -Query $IndexQuery
        }

}
  

Значение переменной $IndexQuery равно

 USE master
                        EXECUTE dbo.IndexOptimize @Databases = '$DBName',
                        @FragmentationLow = NULL,
                        @FragmentationMedium = 
                       'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
                        @FragmentationHigh = 
                         'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
                        @FragmentationLevel1 = 5,
                        @FragmentationLevel2 = 30,
                        @UpdateStatistics = 'ALL',
                        @OnlyModifiedStatistics = 'Y'
  

По некоторым причинам этот код не работает. Он выполняется без ошибок, но не выполняет перестройку или реорганизацию индексов. Проблема не в sql-запросе, потому что он отлично работает в SSMS, но проблема в моем сценарии powershell. Есть идеи?

Комментарии:

1. Что вы подразумеваете под «ничего не делать с индексами»? Какое значение $IndexQuery ? Какова цель указанного SQL в $IndexQuery ?

2. @Larnu Я отредактировал свой вопрос. Эта переменная содержит sql-запрос, который вызывает хранимые процедуры, но проблема не в части sql, а во вложенном foreachloop

3. Похоже, вы используете скрипты Олы Халенгрена. В параметре уже можно указать несколько баз Databases данных. Вам вообще не нужен цикл

4. Где вы определяете $IndexQuery ? Как написано, он может работать правильно, только если он назначен в цикле (поэтому $DBName заменяется).

5. OP пытается выполнить несколько баз данных и серверов, @PanagiotisKanavos .