Обработка MSSQl 'GO' в строке подключения Powershell - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть 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. Итак, как мне по-прежнему выполнять итерацию и запускать запрос во всех пользовательских базах данных, не создавая несколько соединений, специфичных для каждой БД?

1 Ответ

2 голосов
/ 08 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...