MS SQL Server. Выполнение команд операционной системы
Задача:
Необходимо запустить команду операционной системы (командная оболочка Windows) (или какой-либо исполняемый файл ОС) из скрипта MS SQL Server.
Решение:
MS SQL Server позволяет выполнять команды операционной системы и возвращать результат в виде текстовых строк. Например, прямо из SQL Server можно запустить bat-файл, любую программу и вообще использовать все возможности командной строки.
Для этого используется системная хранимая процедура xp_cmdshell. Запуск этой процедуры по умолчанию запрещен. Чтобы включить эту возможность нужно выполнить следующий код:
Код: Выделить всё
-- Включение разрешения изменения расширенных опций.
EXEC sp_configure 'show advanced options', 1
GO
-- Обновление текущих настроек расширенных опций.
RECONFIGURE
GO
-- Включение возможности запуска внешних программ.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Обновление текущих настроек для запуска внешних программ.
RECONFIGURE
GO
Теперь для запуска bat-файла достаточно выполнить следующую команду:
Код: Выделить всё
EXEC master..xp_cmdshell 'test.bat'
Или эту, если необходимо подавить вывод результатов:
Код: Выделить всё
EXEC master..xp_cmdshell 'test.bat', NO_OUTPUT
Пример 1
Чтобы подключить сетевой диск, читаем здесь.
Пример 2
Чтобы почистить папку C:\WINDOWS\Temp\, выполняем скрипт:
Код: Выделить всё
-- Включение разрешения изменения расширенных опций.
EXEC sp_configure 'show advanced options', 1
GO
-- Обновление текущих настроек расширенных опций.
RECONFIGURE
GO
-- Включение возможности запуска внешних программ.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Обновление текущих настроек для запуска внешних программ.
RECONFIGURE
GO
-- Теперь для запуска bat-файла достаточно выполнить следующую команду:
-- EXEC master..xp_cmdshell 'for /R "C:\WINDOWS\Temp\" %F in (.) DO IF NOT "%F"=="C:\WINDOWS\Temp\." (RD /S /Q "%F") ELSE (Del /F /S /Q "C:\WINDOWS\Temp\*")'