Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кто тупее - я или триггер? / 17 сообщений из 17, страница 1 из 1
20.09.2002, 11:53:06
    #32051882
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Уважаемые коллеги!
Столкнулся я с таким достаточно академическим вопросом:
-- Есть приложение, где триггеры - калька с ErWin шаблонов (несколько подредактированных).
-- В этих триггерах повторяется следующая конструкция (для всех видов: INSERT, DELETE, UPDATE):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create trigger ... for ...
 -- та самая конструкция
 
    declare 
        @ValidCnt int,
        @NumRows

    set @NumRows = @@rowcount
    select @ValidCnt = count(*) 
        from inserted i, <table> t
        where i.<id> = t.<id>

    if @ValidCnt <> @NumRows begin
        raiserror ...
        rollback tran
    end
:::
go

Вопрос собственно такой: Может ли быть, чтобы @ValidCnt <> @NumRows и в каких случаях (I,D,U)?
А то мне кажется, что это все - просто перестраховка.
Разубедите меня, пожалуйста.
Спасибо.
...
Рейтинг: 0 / 0
20.09.2002, 12:46:30
    #32051911
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Ну, господа писатели!
Отличная глава для книги по SQL - "Тонкости T-SQL":0)

Серьезно - кто-нибудь знает?
...
Рейтинг: 0 / 0
20.09.2002, 13:05:02
    #32051917
Kirk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Ну а какие сложности-то? Обычная конструкция для поддержки целостности при множественных операций в таблицах, НЕ связанных констрэйнтами.
...
Рейтинг: 0 / 0
20.09.2002, 13:18:31
    #32051924
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
2 Kirk

Вы неверно интерпретировали мой вопрос.
Я спрашивал: " Может ли быть, чтобы @@rowcount отличалось от количества записей в inserted или updated курсорах и в каких случаях? ", а не: " Что это за конструкция такая ?"

Согласитесь - разные вещи.
...
Рейтинг: 0 / 0
20.09.2002, 13:24:57
    #32051928
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Наверное erwin :))
Если под [scr]<id> [scr] подразумевается PK - то тогда перестраховка - а мож для совместимости -имеется ввиду общая конструкция для ВСЕХ типов баз
А если не PK - то вполне мож быть.
...
Рейтинг: 0 / 0
20.09.2002, 13:26:08
    #32051931
Kirk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Согласен. =)
В случаях, когда одно или более вставляемых (изменямых) значений не соответствует условию. =)
...
Рейтинг: 0 / 0
20.09.2002, 13:29:45
    #32051933
Kirk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Т.е. к примеру (грубо)
t1
a (identity) b (fk<-t2)
1 5
2 6
3 7

t2
b
5
6
7

t3
b
5
7
10

insert into t1 (b) select * from t3
...
Рейтинг: 0 / 0
20.09.2002, 13:31:47
    #32051934
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
2 dao
Если бы это был не PK, то и вопроса бы небыло.

Такое резюме: для случая id = Primary Key эта конструкция не нужна.
Так?
...
Рейтинг: 0 / 0
20.09.2002, 13:41:14
    #32051943
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Если <table> t - это та таблица, на которую навешан этот триггер, то данная конструкция проверяет, что <id> является уникальным. В этот текст ервин превращает уникальный или ПК констрэйн.
Если @ValidCnt = @NumRows - всё нормально
Если @ValidCnt > @NumRows - абзац констрэйну

Кстати, наверное это можно было прочитать в тексте raiserror ...
...
Рейтинг: 0 / 0
20.09.2002, 14:12:00
    #32051966
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
2 alexeyvg

Можно было-бы, если бы это были ErWin триггеры. Я же пояснил, что это - модифицированные триггеры и текст ошибки там просто "Ошибка вставки(удаления) записи"
...
Рейтинг: 0 / 0
20.09.2002, 14:13:19
    #32051968
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Всем спасибо - вопрос исчерпан.
...
Рейтинг: 0 / 0
20.09.2002, 14:41:44
    #32051987
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
А может быть это такая хитрозамысловатая проверка на NOT NULL?
...
Рейтинг: 0 / 0
20.09.2002, 15:18:59
    #32052008
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Триггеры же AFTER и содержимое inserted=вставленным записям. Изначально неверный ход. Вот если бы с deleted сравнивали, то получилась бы проверка на неизменяемость первичного ключа (PK)
Ведь UPADTE() не показывает, изменилось ли поле, а только факт обновления поля.

НЕ ПОНИМАЮ! Конструкция бессмысленна вообще.
...
Рейтинг: 0 / 0
20.09.2002, 15:40:00
    #32052016
VAT
VAT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
Триггер тупее - вышеуказанный
insert into t1 (b) select * from t3
срубается раньше, чем включается триггер при наличии FK,
а при отсутствии FK
@@rowcount = select count(*) from inserted
...
Рейтинг: 0 / 0
20.09.2002, 15:53:02
    #32052022
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
2 VAT
Спасибо - успокоил! :0)
...
Рейтинг: 0 / 0
20.09.2002, 22:48:19
    #32052140
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
на мой взгляд - совершенно ненужная и глупая проверка.

-- Слон
...
Рейтинг: 0 / 0
23.09.2002, 10:16:26
    #32052279
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто тупее - я или триггер?
В итоге вопрос модифицировался:
Кто тупее - ErWin или тот, кто его подредактировал?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кто тупее - я или триггер? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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