Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в триггере / 8 сообщений из 8, страница 1 из 1
13.12.2018, 17:24
    #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
13.12.2018, 17:30
    #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
13.12.2018, 17:36
    #39747553
Pabl0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в триггере
a_voronin, в принципе совет годный, но триггер будет выполняться и отработает и запишет запись в таблицу, а это он делать не должен если [Value] не изменилось
...
Рейтинг: 0 / 0
13.12.2018, 17:45
    #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
13.12.2018, 17:55
    #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
13.12.2018, 17:58
    #39747567
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в триггере
invm,

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

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

, но я не понимаю, это же мы проверяем если не null то пусто вставляем, как это помогло решить проблему, можете пояснить?
...
Рейтинг: 0 / 0
13.12.2018, 18:01
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в триггере / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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