Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118

Понять, почему не срабатывает триггер

20.12.2014, 11:20. Показов 7317. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите понять почему не отрабатывает триггер, потому что я даже не знаю с чего начать. Триггер стоит на одной таблице, но читает другую, если там находиться нужная ему запись, он делает изменения в той таблице в которой стоит.
Вот его код:
SQL
1
2
3
4
5
UPDATE DD  
    SET dd.[digit_sens_num] =  CASE WHEN i.digit_sens_num&POWER(2,15-1)>0 THEN i.digit_sens_num^power(2,15-1) ELSE i.digit_sens_num END    
    FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id 
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code
Можно ли сделать какой-то "счетчик" отработки триггера, чтобы понять вообще работает он или нет ? Какие события мониторить в профайлере чтобы разобраться в ситуации ?
Сумбурно объяснил наверное, но по другому пока не знаю как. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2014, 11:20
Ответы с готовыми решениями:

JQuery!? Не могу понять почему цикл не срабатывает?
for (var b=1; b<=1; b++) { $('#lab_'+b).click(function(){ $('#cng_'+b).attr("disabled",false); }); } вот если это без...

Не срабатывает условие в цикле while не могу понять почему
При решении задачки в которой необходимо сделать игру Однорукий Бандит, наткнулся при тестировании что одно из условий цикла while не...

Не могу понять почему не срабатывает запрос к базе mysql
Всем привет. Перл не знаю, но надо поправить работу одного демона. Есть кусок кода : if ($dhcp_opt82_chasis_id ne '') { ...

15
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 11:40
выложите скрипт создания триггера
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 11:46  [ТС]
nixon93nixon,

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
ALTER TRIGGER [dbo].[No15Sens]
    ON  [dbo].[SYS_DEV_DirtyData]  
    AFTER INSERT
AS  
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
     -- Insert statements for trigger here
    UPDATE DD  
    SET dd.[digit_sens_num] =  CASE WHEN i.digit_sens_num&POWER(2,15-1)>0 THEN i.digit_sens_num^power(2,15-1) ELSE i.digit_sens_num END    
    FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 12:16
добавь в начало исполняемого кода триггера это
SQL
1
2
3
4
IF NOT EXISTS(SELECT 1 FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code )
         RAISERROR ('строк для изменения не найдено', 16, 10);
возможно просто в UPDATE не находит записи удовлетворяющие условиям в ON
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 12:26  [ТС]
Цитата Сообщение от nixon93nixon Посмотреть сообщение
возможно просто в UPDATE не находит записи удовлетворяющие условиям в ON
А почему не находит ? Если я уверен в том, что эта запись там есть, я ее сам туда добавлял. Я почему и спросил, каким методом можно посмотреть как себя ведет триггер.
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 12:57
bsd9, ну тут уж я не знаю почему.
может все-таки данных нет, может не по тем полям связывайте, я же базу не вижу
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 13:01  [ТС]
nixon93nixon, дело в том, что получается, что какие-то он там записи находит, какие-то нет. Так можно как отследить это, например профайлером? Триггер не вчера написан и работает уже год, а с этой проблемой только вчера столкнулся.
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 13:07
честно, не знаю, чем профайлер поможет, но можно реагировать, например записывать в какой-нибудь лог, на случае когда UPDATE не обработал не единой записи
а потом исходя из данных в логе смотреть, почему и как
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 13:17  [ТС]
nixon93nixon, а это трудно реализовать ? Я так сходу не сумею. Еще такой вопрос, может быть так, что событий настолько много, что он не успевает срабатывать ? Может он в этой табличке не успевает найти эту запись ?
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 13:21
Цитата Сообщение от bsd9 Посмотреть сообщение
что событий настолько много, что он не успевает срабатывать
нет, такого не может быть

Цитата Сообщение от bsd9 Посмотреть сообщение
а это трудно реализовать ?
да нет, в общем, не трудно
возвращает кол-во обработанных строк. просто проверка после Update, если больше 0 то ничего не делать, если =0, то куда-то записать данные из inserted, чтобы потом их использовать для анализа

p.s. возможно, еще есть варианты решения проблемы, но я о таких не знаю
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 13:32  [ТС]
Цитата Сообщение от nixon93nixon Посмотреть сообщение
нет, такого не может быть
Я имел ввиду может чтение из этой таблички замедлено чем-то. Не может найти там запись.
Цитата Сообщение от nixon93nixon Посмотреть сообщение
да нет, в общем, не трудно
Все усложняется тем, что мне надо понять почему он не срабатывает для конкретной записи.
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
20.12.2014, 13:39
Триггер срабатывает всегда (при вставке в вашем случае), но не всегда он выполняет update, т.к в
"INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code" может не быть связующих строк..
смотрите что вставляете в таблицу SYS_DEV_DirtyData в колонку device_code и смотрите есть ли такая запись в No15Sens_devices
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
20.12.2014, 13:40
давайте заново, вставьте в триггер это и попробуйте вставить через MS SQL Studio
SQL
1
2
3
4
IF NOT EXISTS(SELECT 1 FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code )
         RAISERROR ('строк для изменения не найдено', 16, 10);
если дело в запросе, то выведет соответствующее сообщение, если нет, то дело не в запросе
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
20.12.2014, 16:35
Что там у вас с настройками рекурсивного вызова триггера?
Зачем апдейтить только что проапдейченные записи ещё раз?
Почему нельзя это сделать в первом UPDATE ?
Цитата Сообщение от bsd9 Посмотреть сообщение
SET dd.[digit_sens_num] = CASE WHEN i.digit_sens_num&POWER(2,15-1)>0 THEN i.digit_sens_num^power(2,15-1) ELSE i.digit_sens_num END
Это эквивалентно просто обнулению бита
T-SQL
1
SET dd.[digit_sens_num]&=~POWER(2,15-1)
Добавлено через 7 минут
Эквивалентно потому, что в момент выполнения триггера AFTER UPDATE
записи в таблице уже изменены и в точности соответствуют inserted
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
20.12.2014, 20:37  [ТС]
asd24, там еще одно условие CASE WHEN i.digit_sens_num&POWER(2,15-1). Вообщем опытным путем я выяснил, что триггер не реагирует на одну конкретную запись. Т.е он ее "не видит" внутри таблицы No15.

nixon93nixon, хорошо, сейчас попробую.

iap, дело в том, что автор триггера не я. Я отнесся к этому по принципу "работает - не трогай". Поэтому ответить на вопрос зачем я пока не могу, но скажу, что приложение у нас специфическое и "странненькое". Попробую сделать как Вы говорите.

Добавлено через 2 часа 34 минуты
UPDATE.

SQL
1
2
3
[quote="iap;7013734"]Код T-SQL
1
SET dd.[digit_sens_num]&=~POWER(2,15-1)[/quote]
Вот так помогло, сейчас вроде полет нормальный. Почему у меня старым способом не работало ?
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
27.12.2014, 11:49  [ТС]
UPDATE 2
Рано радовался. Проблема появилась вновь. Запись при вставке в табличку должна обнуляться триггером, но она этого не делает. Ну или триггер не делает.

Добавлено через 20 часов 58 минут
nixon93nixon, сделал так:

перед

SQL
1
2
3
4
5
UPDATE DD  
    SET dd.[digit_sens_num] =  CASE WHEN i.digit_sens_num&POWER(2,15-1)>0 THEN i.digit_sens_num^power(2,15-1) ELSE i.digit_sens_num END    
    FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id 
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code
вставил

SQL
1
2
3
4
IF NOT EXISTS(SELECT 1 FROM inserted AS i  
    INNER JOIN [dbo].[SYS_DEV_DirtyData] AS dd ON dd.id=i.id
    INNER JOIN [dbo].[No15Sens_devices] AS No15 ON No15.device_code=i.device_code )
         RAISERROR ('строк для изменения не найдено', 16, 10);
строк для изменения не найдено не появляется при вставке, но триггер все равно не делает что я хочу. При вставке колонка все равно содержит значение 262144. Куда дальше рыть ? Я ума не приложу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2014, 11:49
Помогаю со студенческими работами здесь

Не срабатывает RS-триггер
Доброго дня. Имеется задача, симитировать сигнал заданный по рисунку (цикл до 150 мс.) Составил уравнения переключения обоих...

Параметры SqlBulkCopyOptions: не срабатывает триггер
Есть проект написанный на C# Visual studio 2012. Он подключен к MSSQL SERVER 2008. В БД в таблице есть триггер. В самой системе СУБД...

Не срабатывает триггер между ComboBox'ами
На форме есть Combobox (name=combo_box1) c двумя возможными значениями: Лес и Вода. Как сделать в Xaml чтобы при выборе воды, на форме...

MouseBinding не срабатывает триггер IsPressed в стиле
Стиль: <Trigger Property="IsPressed" Value="True"> <Setter Property="Fill" TargetName="Path"...

Не правильно срабатывает триггер в теге style
Пишу проект используя шаблон MVVM для WPF. У меня есть 10 кнопок для ввода цифр. К ним привязаны биндинги команд и биндинг на стиль из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru