Я смог это сделать
сначала создать пакетный пример файла test.bat и установить код в
@ECHO OFF
ECHO Please Wait....
NET STOP MSSQLSERVER
NET START MSSQLSERVER /m"SQLCMD"
sqlcmd -s . -E -i query.sql
NET STOP MSSQLSERVER
NET START MSSQLSERVER
первая остановка sql сервер
и запуск -m параметр для запуска однопользовательского режима
«SQLCMD» подключается только из командной строки в однопользовательском режиме
после запуска однопользовательского режима выполнить запрос. sql
- с. адрес сервера здесь мой локальный
-e connect windows аутентификация
-i sql запрос на выполнение
запрос. sql:
use mydatabase
Go
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'newuser') DROP login [newuser]
Go
create LOGIN newuser WITH PASSWORD = '123456',CHECK_POLICY = OFF,CHECK_EXPIRATION = OFF ;
Go
EXEC master..sp_addsrvrolemember @loginame = N'newuser', @rolename = N'sysadmin'
Go
в sql запрос сначала проверяет, существует ли newuser drop, затем создает с ролью sysadmin
после выполнения sql запрос останавливает sql сервер и снова запускается нормально без параметра
теперь выполняется командный файл запускается от имени администратора с c#
var proc = new Process();
proc.StartInfo.CreateNoWindow = true; //run background
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.Verb = "runas"; //ask local admin pass when run
proc.StartInfo.FileName = "batch file address";
proc.Start();