Сценарий Powershell для запуска файла сценария SQL для изменения таблицы базы данных без запуска MS SQL Server Management Studio - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать сценарий PowerShell, который будет запускать сценарии MS SQL, которые будут обновлять базу данных SQL Server. Сценарии SQL будут сохранены в определенной папке, и после запуска PowerShell он должен запускать сценарии без запуска Management Studio.

У меня есть команда PowerShell, которая может запускать и запускать sqlcmd в PowerShell, но меня подводит то, что когда я использую функцию Invoke-item PowerShell, она запускает Microsoft SQL Server Management Studio. Я хочу передать учетные данные для входа в сценарий и запустить сценарии SQL без запуска SQL Server Management Studio.

PS C:\Users\Admin> $SqlServer = "localhost"
PS C:\Users\Admin> $SqlDBName = "Test"
PS C:\Users\Admin> $SqlConnection =New-Object System.Data.SqlClient.SqlConnection
PS C:\Users\Admin> $SqlConnection.ConnectionString ="Server = $SqlServer; Database =$SqlDBName; User id ='**'; password ='**'"
PS C:\Users\Admin> Invoke-Item 'D:\MSSQLScripts\AlterTable.sql'

AlterTable.sql похож на это

use Test
Alter table employee
add Dateofjoining date;
select * from  Employee 

Итак, PowerShell запускает сценарий AlterTable.sql и запускает вход в Microsoft SQL Server Management Studio на странице. Я хочу, чтобы это было гладко - никакого другого участия человека. Страница входа не должна появляться вообще. Причина передачи учетных данных в строке SqlConnection состоит в том, чтобы этого избежать. Следует просто изменить базу данных и все, что пользователи должны проверять в файле журнала.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Мне удалось решить эту проблему, заменив Get-Content на Invoke-Sqlcmd Invoke-Sqlcmd я могу запускать сценарии sql без запуска Microsoft SQL Management Studio.Поэтому в этом случае я использую Invoke-Sqlcmd -InputFile (путь к файлу) , и он выполняет сценарий.

0 голосов
/ 18 июня 2019

Считайте скрипт в строку, передайте его объекту SqlCommand и выполните:

$SqlScript = Get-Content D:\MSSQLScripts\AlterTable.sql -Raw
$SqlCommand = New-Object System.Data.SqlClient.SqlCommand
$SqlCommand.CommandText = $SqlScript
$SqlCommand.Connection = $SqlConnection
[void]$SqlCommand.ExecuteNonQuery()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...