вторник, 13 декабря 2016 г.

MS SQL Server Рекурсия в триггерах (Transcat SQL)

Окружение:

MS SQL Server 2014, Transact SQL

Ситуация

Триггер должен менять поля в других записях этой же таблицы

Вопросы

Работая над этим вопросом столкнулся с проблемой рекурсивных вызовов.
Если триггер апдейтит другие записи, то он может и не вызываться (у меня не вызывался).

За это поведение на уровне БД отвечает настройка рекурсивного вызова триггеров.
Вот скрипт изменения этой настройки.

ALTER DATABASE databasename
SET RECURSIVE_TRIGGERS ON OFF


Посмотреть текущее состояние - можно в свойствах БД.

Также в коде можно проверять уровень вложенности триггеров

IF ((SELECT TRIGGER_NESTLEVEL()) > )RETURN

Обратите внимание, если Вы реите работать с рекурсивными триггерами, то курсоры вам нужно делать обязательно локальные

DECLARE cursor_name CURSOR LOCAL ...

Материалы по теме


How do I prevent a database trigger from recursing?
http://stackoverflow.com/questions/1529412/how-do-i-prevent-a-database-trigger-from-recursing

SQL SERVER – 2005 Understanding Trigger Recursion and Nesting with examples
http://blog.sqlauthority.com/2007/05/18/sql-server-2005-understanding-trigger-recursion-and-nesting-with-examples/

ALTER DATABASE SET Options (Transact-SQL)
https://msdn.microsoft.com/en-us/library/bb522682.aspx

Database Properties (Options Page)
https://msdn.microsoft.com/en-us/library/ms188124.aspx

Turning Recursive and Nested Triggers On and Off
http://www.devx.com/tips/Tip/30031

TRIGGER_NESTLEVEL (Transact-SQL)
https://msdn.microsoft.com/en-us/library/ms182737%28v=sql.105%29.aspx

DECLARE CURSOR (Transact-SQL)
https://msdn.microsoft.com/en-us/library/ms180169.aspx

четверг, 8 декабря 2016 г.

Битрикс: настройка проверки наличия товара

как система проверяет наличие товара?
как система определяет товары недоступные для покупки?

Для ответа на вопросы рекомендую материалы:

https://dev.1c-bitrix.ru/user_help/content/iblock/components_2/catalog/catalog.php
и
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=42&LESSON_ID=5298

Битрикс ошибка при удалении типа инфоблока: "Ошибка удаления. Возможно есть ссылающиеся объекты."

Ситуация

Битрикс, пытаюсь удалить тип инфоблока - получаю ошибку:

"Ошибка удаления. Возможно есть ссылающиеся объекты."

Решение

Захожу в редактирование типа инфоблока.
Переключаюсь на вкладку "Торговый каталог"
Снимаю галочки "Является торговым каталогом" и "Инфоблок имеет торговые предложения".

После этого получилось удалить тип инфоблока.

Источник

Помогла тема форума
http://dev.1c-bitrix.ru/support/forum/forum26/topic35556/1