Как указано в других ответах, хитрость (в SQL 2005 или более поздней версии) заключается в изменении глобальных параметров конфигурации для show advanced options
и xp_cmdshell
на 1
,в этом порядке.
Помимо этого, если вы хотите сохранить предыдущие значения, вы можете сначала прочитать их из sys.configurations
, а затем применить их в обратном порядке в конце.Мы также можем избежать ненужных вызовов reconfigure
:
declare @prevAdvancedOptions int
declare @prevXpCmdshell int
select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'
if (@prevAdvancedOptions = 0)
begin
exec sp_configure 'show advanced options', 1
reconfigure
end
if (@prevXpCmdshell = 0)
begin
exec sp_configure 'xp_cmdshell', 1
reconfigure
end
/* do work */
if (@prevXpCmdshell = 0)
begin
exec sp_configure 'xp_cmdshell', 0
reconfigure
end
if (@prevAdvancedOptions = 0)
begin
exec sp_configure 'show advanced options', 0
reconfigure
end
Обратите внимание, что это зависит от версии SQL Server 2005 или более поздней (первоначальный вопрос был за 2008 год).