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

Откуда: Саратов
Сообщений: 778
SQL 2008 R2.

Сделал задание для SQL агента, - в нем - шаг T-SQL Script, - сам скрипт - некий курсор с записью в временные таблицы.
Курсор вроде бы отрабатывает, но в конце - задание валится с ошибкой. Job History показывает такое :
Job History
" Oct 27 2011 8:12AM [SQLSTATE 01000] (Error 50000) 5 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:12AM [SQLSTATE 01000] (Error 50000) 6315 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 6480 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 6760 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 7830 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 8043 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 8044 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9162 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9163 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9164 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9165 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9166 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9167 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 9415 [SQLSTATE 01000] (Error 50000) Oct 27 2011 8:13AM [SQLSTATE 01000] (Error 50000) 10289 [SQLSTATE 01000] (Error 50000)"
.
При этом запускаешь тот же самый скрипт просто в SSMS, - нормально отрабатывает.
Подскажите - чтобы это значило?
27 окт 11, 08:39    [11506498]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вып хоть бы скрипт привели...
27 окт 11, 09:42    [11506670]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
_quark_
Member

Откуда:
Сообщений: 22
McCar,

попробуйте посмотреть, какие ошибки были до этого. см. также
27 окт 11, 09:42    [11506671]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
McCar
Member

Откуда: Саратов
Сообщений: 778
tpg
Вып хоть бы скрипт привели...

USE forMSAS;

set nocount on;
Truncate table L_MOVE_SPLITTED2;
DECLARE @C_MOVE int, @C_WARE INT, @C_MODEL INT,  @DTCR int,  @MOVE_QTY DECIMAL(18,3)
DECLARE @DATE_REVALUATION DATE ; --дата переоценки
select @DATE_REVALUATION='20100101';

DECLARE @C_MOVE_ALREADY_PROCESSED INTEGER;
DECLARE @RN INTEGER; --ПОРЯДКОВОВЫЙ НОМЕР по с_move  ПО СОЧЕТАНИЮ ТОВАР МОДЕЛЬ 
DECLARE @C_MOVE_INCOME_MAX INTEGER; --МАКСИМАЛЬНЫЙ ПРИХОДНЫЙ C_MOVE ПЕРЕД ТЕКУЩЕЙ ПРОВОДКОЙ 
declare @cnt int; 
set @cnt=0;
DECLARE @mess varchar(100);

IF OBJECT_ID('tempdb..#L_REM_SPLITTED') IS NOT NULL DROP TABLE #L_REM_SPLITTED
CREATE TABLE #L_REM_SPLITTED(C_MOVE_INCOME INTEGER, QTY DECIMAL(18,3));;
CREATE UNIQUE CLUSTERED INDEX IX_L_REM_SPLITTED on #L_REM_SPLITTED(C_MOVE_INCOME,QTY) 



declare @QtyToDistribute decimal(18,3),@RemQTYToDistribute decimal(18,3), @AllDistributed int, @C_MOVE_TO_DISTRIBUTE_FROM_REM int;
 ; --количество в проводке и остатках которое нужно разбить на партии, метка что количество еще не распределено, и текущая партия для распределения

DECLARE CRS CURSOR FOR
WITH CTE_MOVES_AFTER_REVALUATION as 
(SELECT m.C_MOVE, m.DTCR, M.C_WARE, m.C_MODEL,   (CASE WHEN m.[DTCR]=0 THEN m.[Q_MOVE_PRICE_UNIT] ELSE -[m].[Q_MOVE_PRICE_UNIT] END) as QTY_MOVE FROM L_move m 
 WHERE [m].[C_QTY]=901 
 AND [m].[C_WARE] IN (105826	,22847192) 
  and m.[MOVE_DATE]>=@DATE_REVALUATION )
,
CTE_REM_TO_REVALUATION  as --остатки на момент пероценки
(
select ISNULL(rr.C_WARE, mm.C_WARE) as c_ware, 
ISNULL(rr.C_MODEL, mm.C_MODEL) as C_MODEL,
ISNULL(rr.QTY_REM,0)-ISNULL(mm.QTY_MOVE,0) as QTY_BEFORE 
 from 
(SELECT r.C_WARE, r.C_MODEL, SUM(R.QTY_R) AS QTY_REM   FROM L_REM r WHERE 
[r].[C_QTY]=901 AND [r].[C_WARE] IN (105826	,22847192) 
and r.QTY_R>0 GROUP BY [C_WARE], [C_MODEL]) rr
full outer join 
(
SELECT  [C_WARE], [C_MODEL], SUM(CTE_MOVES_AFTER_REVALUATION.QTY_MOVE) as QTY_MOVE from CTE_MOVES_AFTER_REVALUATION GROUP BY [C_WARE], [C_MODEL]
having SUM(CTE_MOVES_AFTER_REVALUATION.QTY_MOVE)<>0) mm on mm.C_MODEL=rr.C_MODEL and mm.C_WARE=rr.C_WARE
)
, CTE_REM_AND_MOVES as
(
select -1 as c_move, 0 as DTCR, re.* from CTE_REM_TO_REVALUATION re
where re.QTY_BEFORE<>0
union all 
select * from CTE_MOVES_AFTER_REVALUATION) 
select 
--top 10
cte.C_MOVE, ROW_NUMBER() over (PARTITION BY cte.c_ware, cte.c_model order by cte.c_Move) as RN, cte.DTCR, cte.C_WARE, cte.C_MODEL, cte.QTY_BEFORE as QTY from CTE_REM_AND_MOVES cte    --where CTE_REM_AND_MOVES.c_ware=100016 and CTE_REM_AND_MOVES.c_model=150
--where ((cte.C_WARE=7856516 and cte.C_MODEL=150) OR (cte.C_WARE=7723344 and cte.C_MODEL=14463142)  OR (cte.C_WARE=63294231 and cte.C_MODEL=150))
order by C_WARE, C_MODEL, c_move

--AND m.C_MOVE>@C_MOVE_ALREADY_PROCESSED


OPEN CRS;
FETCH NEXT FROM CRS
INTO @C_MOVE,@RN, @DTCR, @C_WARE, @C_MODEL,   @MOVE_QTY ;
WHILE @@FETCH_STATUS = 0 --and @cnt<100
BEGIN
set @cnt=@cnt+1;
--print @cnt;
if(@RN=1) --ПОШЛО НОВ СОЧЕТАНИЕ ТОВАРА И МОДЕЛИ
BEGIN
set @mess=CAST(@cnt as varchar(10));
raiserror(@mess,5,10) with nowait; 
set @mess=CAST(getdate() as varchar(50));
raiserror(@mess,5,10) with nowait;
	--если новый товар модель  - начинаем по новой заполнять таблицу с остатками
TRUNCATE TABLE  #L_REM_SPLITTED;
END 

IF (@DTCR=0) --приход
BEGIN
	INSERT #L_REM_SPLITTED(C_MOVE_INCOME,QTY) VALUES (CASE WHEN  @C_MOVE=-1 THEN  
	(SELECT MAX(C_MOVE) FROM L_MOVE m where m.C_QTY=901 and m.DTCR=0 and m.MOVE_DATE<@DATE_REVALUATION and   m.c_ware=@C_WARE and m.C_MODEL=@C_MODEL --если это зафиксированный как приходная проводка остаток - берем первую старых
	) ELSE @C_MOVE END, @MOVE_QTY )	
END

ELSE  --Расход --его возможно придется распределить по проводкам в зависимости от партиционных остатокам
BEGIN
   set @QtyToDistribute=-@MOVE_QTY;
   SET @AllDistributed=0;
   WHILE (@AllDistributed=0)
   BEGIN
   SET @C_MOVE_TO_DISTRIBUTE_FROM_REM=NULL;
   select top  1 @RemQTYToDistribute= QTY,  @C_MOVE_TO_DISTRIBUTE_FROM_REM =C_MOVE_INCOME from #L_REM_SPLITTED WHERE QTY>0  order by C_MOVE_INCOME;
   IF @C_MOVE_TO_DISTRIBUTE_FROM_REM IS NULL BREAK ; --хотя вроде не должно такое условие сработаьть..    ;  
   IF (@RemQTYToDistribute>=@QtyToDistribute) --ЕСЛИ В ПЕРВОЙ НЕНУЛЕВОЙ ПАРТИИ НА СКЛАДЕ ЛЕЖИТ БОЛЬШЕ ЧЕМ ИЗРАСХОДОВАЛИ В ТЕКУЩЕЙ ПРОВОДКЕ
	BEGIN
	INSERT L_MOVE_SPLITTED2(C_MOVE_OUTCOM, C_MOVE_INCOME, MOVE_QTY) VALUES (@C_MOVE, @C_MOVE_TO_DISTRIBUTE_FROM_REM, @QtyToDistribute);
	UPDATE #L_REM_SPLITTED SET QTY=QTY-@QtyToDistribute where C_MOVE_INCOME=@C_MOVE_TO_DISTRIBUTE_FROM_REM;
		SET @AllDistributed=1; BREAK;
	   END
	 ELSE --если остаток из первой ненулевой партии меньше чем израсходовали
	 BEGIN 
	-- print 'распределяем проводку '+cast(@C_MOVE as varchar(10));
		 INSERT L_MOVE_SPLITTED2(C_MOVE_OUTCOM, C_MOVE_INCOME, MOVE_QTY) VALUES (@C_MOVE, @C_MOVE_TO_DISTRIBUTE_FROM_REM, @RemQTYToDistribute);
		 DELETE From #L_REM_SPLITTED where C_MOVE_INCOME=@C_MOVE_TO_DISTRIBUTE_FROM_REM;
		 SET @QtyToDistribute=@QtyToDistribute-@RemQTYToDistribute;
	 END 
   END
END
/**/
 FETCH NEXT FROM CRS
  INTO @C_MOVE,@RN, @DTCR, @C_WARE, @C_MODEL,   @MOVE_QTY
   END
CLOSE CRS;
DEALLOCATE CRS;

27 окт 11, 09:52    [11506723]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Триггер с raiserror?
27 окт 11, 11:04    [11507218]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
McCar
Member

Откуда: Саратов
Сообщений: 778
Гавриленко Сергей Алексеевич
Триггер с raiserror?

Нее.. такого точно нет..
27 окт 11, 11:37    [11507517]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Значит принты.
27 окт 11, 11:40    [11507543]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
print 'Test1'
raiserror ('Test2', 10, 1)

В логе:
Executed as user: NT AUTHORITY\SYSTEM. Test1 [SQLSTATE 01000] (Message 0) Test2 [SQLSTATE 01000] (Message 50000). The step succeeded.

Значит, все-таки, принт, сделанный через raiserror с 10м северити.
27 окт 11, 11:49    [11507620]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Кстати. Эти принты ошибку джоб не валят. Скорее всего, ошибка была, но после.
27 окт 11, 11:52    [11507649]     Ответить | Цитировать Сообщить модератору
 Re: Error 50000 при запуске задания SQL Agent  [new]
McCar
Member

Откуда: Саратов
Сообщений: 778
Точно, оно!
Убрал отладочные raiserror, - отработало нормально.
Спасибо.
27 окт 11, 12:17    [11507899]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить