Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с sp_help_job на SQL2012, хелп плз  [new]
abrashka
Member

Откуда:
Сообщений: 521
День добрый!

В SQL 2005/2008 использую процедуру, которая дает индикацию или джоб сейчас бежит, вот ее код:
set @JobName = (select top 1 PrmValue from Install.Parameters where PrmName = 'ETL_Job_Name')

set @QueryText='SELECT
@JobExecutionStatus=Current_execution_status,@JobEnabled=enabled 
FROM OPENROWSET(''SQLOLEDB'',''Server= ' + CONVERT(sysname, SERVERPROPERTY('servername')) + ';Trusted_Connection=yes;'',''EXEC MSDB.dbo.sp_help_job'')
Where name=@JobName'


При переходе на 2012 выяснилось, что так работать не будет, поэтому переписал код:
set @QueryText='SELECT
@JobExecutionStatus=Current_execution_status,@JobEnabled=enabled 
FROM OPENROWSET(''SQLOLEDB'',''Server= ' + CONVERT(sysname, SERVERPROPERTY('servername')) + ';Trusted_Connection=yes;'',''EXEC MSDB.dbo.sp_help_job
			WITH RESULT SETS
			( 
			 (
				job_id						UNIQUEIDENTIFIER, 
				originating_server			NVARCHAR(30), 
				name						SYSNAME, 
				[enabled]					TINYINT, 
				[description]				NVARCHAR(512), 
				start_step_id				INT, 
				category					SYSNAME, 
				[owner]						SYSNAME, 
				notify_level_eventlog		INT, 
				notify_level_email			INT, 
				notify_level_netsend		INT, 
				notify_level_page			INT, 
				notify_email_operator		SYSNAME, 
				notify_netsend_operator		SYSNAME, 
				notify_page_operator		SYSNAME, 
				delete_level				INT, 
				date_created				DATETIME, 
				date_modified				DATETIME, 
				version_number				INT, 
				last_run_date				INT, 
				last_run_time				INT, 
				last_run_outcome			INT, 
				next_run_date				INT, 
				next_run_time				INT, 
				next_run_schedule_id		INT, 
				current_execution_status	INT, 
				current_execution_step		SYSNAME, 
				current_retry_attempt		INT, 
				has_step					INT, 
				has_schedule				INT, 
				has_target					INT, 
				[type]						INT 
			 )
			)


'')
Where name=@JobName'


Но новый код не будет работать на старых системах, а хотелось бы универсальную процедуру, которая будет работать и там и там, без проверок на какой системе она запущена.

Тут один товарищ описывает решение подомной проблемы, но может кто-то знает более удобный вариант?
[url=]http://blogs.msdn.com/b/sqlagent/archive/2012/07/12/workaround-sql-server-2012-openrowset-on-msdb-dbo-sp-help-job-throws-error.aspx[/url]

Спасибо!
5 ноя 13, 13:44    [15078476]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с sp_help_job на SQL2012, хелп плз  [new]
abrashka
Member

Откуда:
Сообщений: 521
Грубо говоря вот два скрипта, один работает только в SQL 2008, а второй только в 2012
Результат тот-же.

Как заставить работать этот код в обоих версиях?

declare @JobExecutionStatus int 
declare @JobEnabled int

/****************************************************/
--SQL 2008
SELECT
@JobExecutionStatus=Current_execution_status,@JobEnabled=enabled 
FROM OPENROWSET('SQLOLEDB','Server= MyServer;Trusted_Connection=yes;','EXEC MSDB.dbo.sp_help_job')
Where name='JobName'
/****************************************************/
--SQL 2012
SELECT
@JobExecutionStatus=Current_execution_status,@JobEnabled=enabled 
FROM OPENROWSET('SQLOLEDB','Server= MyServer;Trusted_Connection=yes;','EXEC MSDB.dbo.sp_help_job
			WITH RESULT SETS
			( 
			 (
				job_id						UNIQUEIDENTIFIER, 
				originating_server			NVARCHAR(30), 
				name						SYSNAME, 
				[enabled]					TINYINT, 
				[description]				NVARCHAR(512), 
				start_step_id				INT, 
				category					SYSNAME, 
				[owner]						SYSNAME, 
				notify_level_eventlog		INT, 
				notify_level_email			INT, 
				notify_level_netsend		INT, 
				notify_level_page			INT, 
				notify_email_operator		SYSNAME, 
				notify_netsend_operator		SYSNAME, 
				notify_page_operator		SYSNAME, 
				delete_level				INT, 
				date_created				DATETIME, 
				date_modified				DATETIME, 
				version_number				INT, 
				last_run_date				INT, 
				last_run_time				INT, 
				last_run_outcome			INT, 
				next_run_date				INT, 
				next_run_time				INT, 
				next_run_schedule_id		INT, 
				current_execution_status	INT, 
				current_execution_step		SYSNAME, 
				current_retry_attempt		INT, 
				has_step					INT, 
				has_schedule				INT, 
				has_target					INT, 
				[type]						INT 
			 )
			)


')
Where name='JobName'


Спасибо!
5 ноя 13, 15:52    [15079611]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с sp_help_job на SQL2012, хелп плз  [new]
Гость333
Member

Откуда:
Сообщений: 3683
if cast(cast(serverproperty('ProductVersion') as char(2)) as int) < 11
    ... код для MSSQL < 2012
else
    ... код для MSSQL >= 2012
5 ноя 13, 16:01    [15079691]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с sp_help_job на SQL2012, хелп плз  [new]
aleks2
Guest
Ну... заглянуть в текст процедуры и сделать прямую выборку из табличек MSDB - это слишком просто?
5 ноя 13, 16:08    [15079740]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с sp_help_job на SQL2012, хелп плз  [new]
Гость333
Member

Откуда:
Сообщений: 3683
aleks2
Ну... заглянуть в текст процедуры и сделать прямую выборку из табличек MSDB - это слишком просто?

Там нет табличек для прямой выборки, для получения статуса джоба вызывается расширенная ХП xp_sqlagent_enum_jobs, которая возвращает табличный результат.
Известный баян — нельзя сделать INSERT ... EXEC sp_help_job, т.к. INSERT EXEC cannot be nested.
5 ноя 13, 16:30    [15079855]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить