Обработка MSSQl 'GO' в строке подключения Powershell

У меня есть SQL-запрос, который исправлен с помощью Go для проверки потерянных объектов в mssql.

use DBName
go
sp_change_users_login 'report'

Теперь я автоматизирую описанное выше в Powershell для всех пользовательских баз данных и пытаюсь получить пользователей-сирот.

Вот код:

        if ($port)
        {
        $connectionString  = "server=$servername,$port;Integrated Security=true;" #uid=$DBUserName; pwd=$dbpwd;Database=$DB;
        }
        else
        {
        $connectionString  = "server=$servername;Integrated Security=true;" 
        }
        $connection = New-Object System.Data.SqlClient.SqlConnection -ea Stop
        $connection.ConnectionString=$connectionString
        $connection.Open()

        $db_query = @"
        Select name from sys.sysdatabases where dbid > 4 and name not in ('ReportServer')
"@
        $command = $connection.CreateCommand()
        $command.CommandText = $db_query
        $result = $command.ExecuteReader()
        $object= New-Object System.Data.DataTable
        $object.Load($result)
        [System.Array]$DBs = $object.name

        if ($DBs -is [System.Array])
        {
            foreach($DB in $DBs)
            {
            ## PROBLEM IS HERE ###
              $orphan_users_query = @"

                use $DB
                GO
                sp_change_users_login 'report'

"@
        $command = $connection.CreateCommand()
        $command.CommandText = $orphan_users_query
        $result = $command.ExecuteReader()
        $object= New-Object System.Data.DataTable
        $object.Load($result)
        $object | Out-File C:\temp\outfile_property.txt -Append -Force
            }
        }

Проблема в том, что PS не может идентифицировать разделитель go, потому что он специфичен для MSSQL/SSMS. Итак, как я могу выполнять итерацию и выполнять запрос во всех пользовательских базах данных, не создавая несколько соединений, специфичных для каждой БД?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вызов ChangeDatabase для соединения является альтернативным способом переключения баз данных.

Затем вы можете просто выполнить sp_change_users_login как есть. Не надо GO.

К сожалению, я действительно хочу избежать изменения БД с помощью строки подключения и хочу обрабатывать ее в запросах sql. Есть ли другие средства для прогресса? Если изменение БД обрабатывается, то я могу полностью игнорировать Go, как вы заявили.

Ranadip Dutta 08.04.2019 11:39

@RanadipDutta - я не понимаю возражений. Буквально просто $connection.ChangeDatabase($DB).

Damien_The_Unbeliever 08.04.2019 11:40

Проблема в том, что владелец продукта пытается этого избежать :P. Ничего больше. В любом случае, я приму этот ответ, потому что он имеет смысл.

Ranadip Dutta 08.04.2019 11:42

Другие вопросы по теме