powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кто тупее - я или триггер?
17 сообщений из 17, страница 1 из 1
Кто тупее - я или триггер?
    #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
Кто тупее - я или триггер?
    #32051911
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, господа писатели!
Отличная глава для книги по SQL - "Тонкости T-SQL":0)

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

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

Согласитесь - разные вещи.
...
Рейтинг: 0 / 0
Кто тупее - я или триггер?
    #32051928
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное erwin :))
Если под [scr]<id> [scr] подразумевается PK - то тогда перестраховка - а мож для совместимости -имеется ввиду общая конструкция для ВСЕХ типов баз
А если не PK - то вполне мож быть.
...
Рейтинг: 0 / 0
Кто тупее - я или триггер?
    #32051931
Kirk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен. =)
В случаях, когда одно или более вставляемых (изменямых) значений не соответствует условию. =)
...
Рейтинг: 0 / 0
Кто тупее - я или триггер?
    #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
Кто тупее - я или триггер?
    #32051934
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 dao
Если бы это был не PK, то и вопроса бы небыло.

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

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

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

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

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


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