powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер
8 сообщений из 8, страница 1 из 1
Триггер
    #32030557
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Create trigger
...
Рейтинг: 0 / 0
Триггер
    #32030559
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы имеете ввиду триггер, который бы при попытке добавить запись в таблицу проверял бы,
что в таблице не существует записи с аналогичными значениями всех полей (и откатывал бы
транзакцию в случае нахождения такой записи)?
...
Рейтинг: 0 / 0
Триггер
    #32030572
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мне именно такой триггер и нужен. Если можно послать триггер на Snake_max@rambler.ru. Спасибо!!!
...
Рейтинг: 0 / 0
Триггер
    #32030573
Kirk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
несколько странная постановка, но

create trigger ti_table on [table] for insert as
if exists(select * from inserted a inner [table] b on
a.field1=b.field1 and ... and a.fieldN=b.fieldN)
rollback tran

где table - имя таблицы, field1..fieldN - имена полей
...
Рейтинг: 0 / 0
Триггер
    #32030701
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, есть база данных GIBDD в которой есть 2 таблицы CARS и VLADELEC. Таблица VLADELEC включает следующие поля:
тип поля
Kod_vladelec -int -является ключевым
FIO -char
Adress -char
Teh_passport -int

Таблица CARS:
N_car -int
Marka -char
Vupusk -int
Color -char
N_dvigatel -int
N_kuzov -int
N_shassi -int
Kod_vladelec -int

Таблицы соединяются отношением один-ко-многим, один со стороны VLADELEC многим со стороны CARS.

+---------------+ +------------+
|CARS | |Vladelec |
|---------------| 1 |------------|
|n_car | +-------|kod_vladelec|
|marka | | |FIO |
|vupusk | | |Adress |
|color | | |teh_passport|
|n_dvigatel | | +------------+
|n_kuzov | |
|n_shassi |M |
|kod_vladelec |-------+
+---------------+

Нужно сделать триггер на добавление, так что бы он блокировал дублирование записей таблицы CARS поля N_car. В общето проще всего сделать поле N_car ключевым, но мне нужен триггер.
...
Рейтинг: 0 / 0
Триггер
    #32030724
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Kirk
Такой триггер не даст вставить ни одной записи...

2Snake
create trigger tiu_CARS on [CARS] for insert, update
as
if update(N_car)
begin
if exists(
select c.N_car, count(*) from inserted i inner [CARS] c on i.N_car = c.N_car
group by c.N_car
having count(*) > 1
)
begin
raiserror('Саблаговолите указать уникальное значение поля N_car!', 16, 1)
rollback tran
return
end
end
go
...
Рейтинг: 0 / 0
Триггер
    #32030758
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если поле CARS.N_car не может принимать значение NULL, то проще сделать индекс со свойством UNIQUE по этому полю (не обязательно при этом делать это поле ключевым или индекс кластерным)

2. Тот триггер который использую я в таких случаях

CREATE TRIGGER [Unique_N_car] ON dbo.CARS
FOR INSERT, UPDATE
AS
/*
Если новое (измененное) значение N_car не пустое, то оно должно быть уникально в пределах таблицы
*/

IF UPDATE(N_car) AND EXISTS(SELECT * FROM CARS a, Inserted I WHERE I.N_car>0 AND a.N_car=I.N_car AND a.RecordID<>I.RecordID)
BEGIN
RAISERROR('Введенное значение N_car не уникально',16,1) --2627
ROLLBACK TRANSACTION
END

Здесь под RecordID - понимается имя ключевого поля таблицы CARS. Кроме того, предполагается, что поле N_car может принимать значение NULL и пустые значения N_car не проверяются на уникальность (если это не так, то проверка I.N_car>0 не нужна)

Если у вашей таблицы нет ключевого поля, то тогда используйте пример приведенный alexeyvg
...
Рейтинг: 0 / 0
Триггер
    #32031020
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Особые благодарности Jimmers, Kirk, Alexeyvg и Владимиру М.
Большое спасибо за триггеры, все работает.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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