Wednesday, April 9, 2008

Выполнение команд операционной системы в MS SQL

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

А вот пример вызова bat-файла с параметром:

DECLARE @param varchar(50)
DECLARE @cmd varchar(100)
SET @param = 'blog.yastrebkov.com'
SET @cmd = 'c:\test.bat ' + @param
EXEC master..xp_cmdshell @cmd

Другие примеры использования вы можете найти на сайте MSDN по этой ссылке.

3 comments:

Anonymous said...

Узнал много. Спасибо

Anonymous said...

Не могу выполнить EXEC master..xp_cmdshell 'c:\windows\system32\msg.exe console /server:userpc Сообщение'

Dmitry I Yastrebkov said...

А что пишет?