powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в триггере
8 сообщений из 8, страница 1 из 1
Помощь в триггере
    #39747546
Pabl0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите,


Код: sql
1.
2.
3.
4.
5.
	INSERT INTO History (TextID, DateEdit, [ValueOld], [ValueNew])
	SELECT i.TextID, GETDATE(), d.[Value], i.[Value]
	FROM
        INSERTED i
            full outer join DELETED d on i.TextID = d.TextID AND d.[Value] != i.[Value]



Проблема в том что если изменять запись и Value не меняется, то изменение выдает null у TextID (а такого быть не может, следовательно ошибка sql)

Можно без if как то решить этот вопрос что бы если value разное то срабатывает триггер, если одинаковое, то триггер не срабатывает
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747552
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pabl0Подскажите,


Код: sql
1.
2.
3.
4.
5.
	INSERT INTO History (TextID, DateEdit, [ValueOld], [ValueNew])
	SELECT i.TextID, GETDATE(), d.[Value], i.[Value]
	FROM
        INSERTED i
            full outer join DELETED d on i.TextID = d.TextID AND d.[Value] != i.[Value]



Проблема в том что если изменять запись и Value не меняется, то изменение выдает null у TextID (а такого быть не может, следовательно ошибка sql)

Можно без if как то решить этот вопрос что бы если value разное то срабатывает триггер, если одинаковое, то триггер не срабатывает

Код: sql
1.
2.
3.
4.
5.
	INSERT INTO History (TextID, DateEdit, [ValueOld], [ValueNew])
	SELECT ISNULL(i.TextID,d.TextID), GETDATE(), d.[Value], i.[Value]
	FROM
        INSERTED i
            full outer join DELETED d on i.TextID = d.TextID AND d.[Value] != i.[Value]
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747553
Pabl0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin, в принципе совет годный, но триггер будет выполняться и отработает и запишет запись в таблицу, а это он делать не должен если [Value] не изменилось
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747556
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pabl0a_voronin, в принципе совет годный, но триггер будет выполняться и отработает и запишет запись в таблицу, а это он делать не должен если [Value] не изменилось

Код: sql
1.
WHERE ISNULL(d.[Value], '') != ISNULL(i.[Value], '')



или

Код: sql
1.
WHERE d.[Value] != i.[Value] OR (d.[Value] IS NULL AND  i.[Value] IS NOT NULL) OR (d.[Value] IS NOT NULL AND  i.[Value] IS NULL)
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747562
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO History (TextID, DateEdit, [ValueOld], [ValueNew])
	SELECT ISNULL(i.TextID,d.TextID), GETDATE(), d.[Value], i.[Value]
	FROM
        INSERTED i
            full outer join DELETED d on i.TextID = d.TextID
        where
          not exists(select d.[Value] intersect select i.[Value])
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747567
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

знаете толк в извращениях написании подзапросов

not exists(select d.[Value] intersect select i.[Value])
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747568
Pabl0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin, вот так сделал работает
Код: sql
1.
WHERE ISNULL(d.[Value], '') != ISNULL(i.[Value], '')

, но я не понимаю, это же мы проверяем если не null то пусто вставляем, как это помогло решить проблему, можете пояснить?
...
Рейтинг: 0 / 0
Помощь в триггере
    #39747572
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pabl0a_voronin, вот так сделал работает
Код: sql
1.
WHERE ISNULL(d.[Value], '') != ISNULL(i.[Value], '')

, но я не понимаю, это же мы проверяем если не null то пусто вставляем, как это помогло решить проблему, можете пояснить?

Откройте для себя высшую истину

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 1
WHERE NULL = NULL

SELECT 1
WHERE ISNULL(NULL,'') = ISNULL(NULL,'')

SELECT 1
WHERE NULL != NULL

SELECT 1
WHERE NOT ISNULL(NULL,'') != ISNULL(NULL,'')
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в триггере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]