Я автоматизирую различные EXE-файлы через командный файл, включая вызов существующего командного файла, который, в свою очередь, выполняет различные инструкции TSQL через OSQL.exe.Оператор TSQL в OSQL терпит неудачу при вызове из командного файла, вызванного из командного файла
Существующий пакетный файл работает нормально. Однако при вызове моего командного файла вызывается вызов osql.exe, что приводит к тому, что пакетный файл выходит из себя.
:check_user_privs
%OSQLPATH% %CONNECTSTRING% -S "%SERVER_INSTANCE%" -d "%DBNAME%" -Q "DECLARE @userName varchar(100) ; set @userName = user_name() ; IF IS_SRVROLEMEMBER ('sysadmin') != 1 RAISERROR ('This user ''%s'' is not a member of the ''sysadmin'' group.' , 16 , 127 , @userName)" > /nul
if errorlevel 1 (
echo ** ERROR - The user is NOT a sysadmin member on "%SERVER_INSTANCE%" - Exiting ** 1
echo.
pause
exit
)
Достаточно сказать, что ошибка возникает. С ECHO ON, что первая строка станет:
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\OSQL.EXE" -U"ADMIN" -P"PASSWORD" -S "SQL_SRVR10" -d "DB01" -Q "DECLARE @userName varchar(100) ; set @userName = user_name() ; IF IS_SRVROLEMEMBER ('sysadmin') != 1 RAISERROR ('This user ''ADMIN'' is not a member of the ''sysadmin'' group.' , 16 , 127 , @userName)" > /nul
Эта линия идентична, когда я звоню сценарий непосредственно из командной строки или из собственного командного файла.
Я вручную захватил переменные среды, которые устанавливаются, когда этот командный файл вызывается из моего пакетного файла. Затем я устанавливаю их вручную в командной строке, а затем запускаю командный файл вручную. Нет воспроизведения.
Я изменил инструкцию TSQL, чтобы просто вывести возвращаемое значение функции IS_SRVROLEMEMBER(). Оба от вызова из моего сценария и командной строки, выход идентичен - «1»:
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\OSQL.EXE" -U"ADMIN" -P"PASSWORD" -S "SQL_SRVR10" -d "DB01" -Q "SELECT IS_SRVROLEMEMBER ('sysadmin')"
Я думаю, что вы правы с «задержкой расширения». Это всегда хорошая идея работать без него из-за побочных эффектов, я делаю это. – Endoro
Но это * так * полезно! :-) –