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

Откуда: Москва
Сообщений: 902
Здравствуйте.
Задание запускает процедуру [USP_New]
ALTER PROC [dbo].[USP_New]
AS
IF EXISTS (SELECT DIFF FROM  UT_CheckJ_1cDWH_02_Update_For_ReportServer)
BEGIN
	print getdate()
	--
	EXEC USP_New_21_Errors_Net_ST1
	--
	print 'USP_New_22_UNION_NPF_Operation_ST1'
	EXEC USP_New_22_UNION_NPF_Operation_ST1
	EXEC USP_New_22_UNION_NPF_Operation_ST2
	--
	print 'USP_New_23_UNION_NPF_Operation_Year_ST1'
	exec	dbo.USP_New_23_UNION_NPF_Operation_Year_ST1
	exec	dbo.USP_New_23_UNION_NPF_Operation_Year_ST2
        --
	print 'USP_New_41_Net_Sales_ST1'
	EXEC [dbo].[USP_New_41_Net_Sales_ST1]
	EXEC dbo.USP_New_41_Net_Add_Sales_ST1
	--
	print 'Обсчет отчетности закончен!!!'
	INSERT UT_DWH_UPDATE_ALL_LOG VALUES(GETDATE())		-- Фиксация даты последней успешной интеграции
	print getdate()
END
ELSE 
BEGIN
	PRINT 'Err USP_New'
	RAISERROR ('Err USP_New', 16, 1) --= print
END

В истории запусков такое сообщение
USP_New_22_UNION_NPF_Operation_ST1 [SQLSTATE 01000] (Message 0) Cannot insert the value NULL into column 'SumType', table 'analytics.dbo.UT_New_22_UNION_NPF_Operation_ST1'; column does not allow nulls. INSERT fails. [SQLSTATE 23000] (Error 515) The statement has been terminated. [SQLSTATE 01000] (Error 3621). The step failed.

Из магических моментов стоит отметить то, что:
При ручном запуске процедура USP_New_22_UNION_NPF_Operation_ST1 выполнилась без ошибок

ALTER PROC [dbo].[USP_New_22_UNION_NPF_Operation_ST1]
AS
TRUNCATE TABLE  UT_New_22_UNION_NPF_Operation_ST1
INSERT INTO UT_New_22_UNION_NPF_Operation_ST1
SELECT	OPS_NumDoc,
		CASE WHEN SumTypeCode = 1 THEN 'Contribution'
			 WHEN SumTypeCode IN (12,9,8,2) THEN 'Profit'
			 WHEN SumTypeCode = 5 THEN 'SecondaryPremium'
			 WHEN SumTypeCode = 6 THEN 'CoFinancing'
			 WHEN SumTypeCode = 11 THEN 'ParentCapital'
			 ELSE CAST(SumTypeCode AS VARCHAR(20))
		END AS SumType,
		SUM(CASE WHEN MovementType = 0 THEN [Sum] WHEN MovementType = 1 THEN -[Sum] END) AS [Sum]
FROM
	(
	SELECT	OPS_NumDoc,
			SumTypeCode,
			MovementType,
			Operation_Date,
			[Sum] 
	FROM dbo.UT_1cDWH_27_NPF_Operation_ST1
	UNION ALL
	SELECT	OPS_NumDoc,
			SumTypeCode,
			MovementType,
			Operation_Date,
			[Sum] 
	FROM dbo.UT_1cDWH_28_NPF_OperationCurrent_ST1	
	) AS OP
group by 
OPS_NumDoc,
CASE WHEN SumTypeCode = 1 THEN 'Contribution'
	 WHEN SumTypeCode IN (12,9,8,2) THEN 'Profit'
	 WHEN SumTypeCode = 5 THEN 'SecondaryPremium'
	 WHEN SumTypeCode = 6 THEN 'CoFinancing'
	 WHEN SumTypeCode = 11 THEN 'ParentCapital'
	 ELSE CAST(SumTypeCode AS VARCHAR(20))
END


таблицы источники dbo.UT_1cDWH_27_NPF_Operation_ST1, dbo.UT_1cDWH_28_NPF_OperationCurrent_ST1 последний раз обновлялись в воскресенье и сбоя при запуске USP_New не было. То есть значения NULL не было ни по одной записи.


Что это может быть?
30 апр 13, 09:48    [14247612]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Что это может быть?

Сannot insert the value NULL into column 'SumType', table 'analytics.dbo.UT_New_22_UNION_NPF_Operation_ST1'; column does not allow nulls. INSERT fails.
30 апр 13, 09:49    [14247624]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Glory
Yagrus2
Что это может быть?

Сannot insert the value NULL into column 'SumType', table 'analytics.dbo.UT_New_22_UNION_NPF_Operation_ST1'; column does not allow nulls. INSERT fails.

Это я понимаю). Но процедура не могла пытаться вставить NULL в поле SumType. И в ручном режиме отработало без ошибки.
30 апр 13, 10:12    [14247774]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Yagrus2
таблицы источники dbo.UT_1cDWH_27_NPF_Operation_ST1, dbo.UT_1cDWH_28_NPF_OperationCurrent_ST1 последний раз обновлялись в воскресенье и сбоя при запуске USP_New не было. То есть значения NULL не было ни по одной записи.
Важно, не то, что "значения NULL не было ни по одной записи", а то, установлено ограничение NOT NULL на эти поля или нет.

Если не установлено, то нужно обрабатывать такие записи в вашем запросе.

Потому что какое SumTypeCode будет в таблицах в момент выполнения, вы не знаете (а точнее, сейчас уже знаете - NULL, потому что других причин быть не может, судя по тексту запроса)
30 апр 13, 10:13    [14247782]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Но процедура не могла пытаться вставить NULL в поле SumType

Да что вы говорите ?
Т.е. сервер самовольно поменял код вашей процедуры, чтобы добавить NULL-ы ?
30 апр 13, 10:14    [14247793]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2567
Yagrus2,

Вы лучше подумайте, откуда там могли NULL'ы взяться...
30 апр 13, 10:21    [14247840]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Glory
Yagrus2
Но процедура не могла пытаться вставить NULL в поле SumType

Да что вы говорите ?
Т.е. сервер самовольно поменял код вашей процедуры, чтобы добавить NULL-ы ?


Можно ли проверить, когда были добавлены NULL-ы из-за которых произошел сбой?
30 апр 13, 11:03    [14248101]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Можно ли проверить, когда были добавлены NULL-ы из-за которых произошел сбой?

Типа узнать, какие данные были в таблицах полгода назад ?
30 апр 13, 11:05    [14248114]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Glory, нет. 2 дня назад
30 апр 13, 11:22    [14248232]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Yagrus2
Glory, нет. 2 дня назад

тогда открывайте ваши средства аудита, которые вы включили/настроили накануне...и смотрите информацию там
30 апр 13, 11:25    [14248253]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
Glory, нет. 2 дня назад

И где же сервер должен был хранить такую информацию, ожидая, а вдруг кто-нибудь захочет посмотреть историю изменения таблиц ?

Декларация полей SumTypeCode в dbo.UT_1cDWH_27_NPF_Operation_ST1 и dbo.UT_1cDWH_28_NPF_OperationCurrent_ST1 допускает хранение NULL-ов ?
30 апр 13, 11:25    [14248258]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Glory,
К сожалению да, подразумевает.
30 апр 13, 12:03    [14248590]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yagrus2
К сожалению да, подразумевает.

Значит код вашего запроса содержит логическую ошибку.
Потому что не обрабатывает одно и возможных значений поля SumTypeCode.

Или схема содержит логическую ошибку. Потому что не может хранить все актуальные значения

Выбирайте.
30 апр 13, 13:54    [14249268]     Ответить | Цитировать Сообщить модератору
 Re: Сбой задания.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Yagrus2
Glory
пропущено...

Да что вы говорите ?
Т.е. сервер самовольно поменял код вашей процедуры, чтобы добавить NULL-ы ?


Можно ли проверить, когда были добавлены NULL-ы из-за которых произошел сбой?
Можно сделать аудит для того, что бы узнать, когда это произойдёт в следующий раз, или, что проще, установить для поля NOT NULL и получить в следующий раз ошибку, тогда будет легко отладить ваш код.
30 апр 13, 14:22    [14249436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить