Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер / 8 сообщений из 8, страница 1 из 1
18.05.2002, 18:32
    #32030557
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Create trigger
...
Рейтинг: 0 / 0
18.05.2002, 19:21
    #32030559
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Вы имеете ввиду триггер, который бы при попытке добавить запись в таблицу проверял бы,
что в таблице не существует записи с аналогичными значениями всех полей (и откатывал бы
транзакцию в случае нахождения такой записи)?
...
Рейтинг: 0 / 0
19.05.2002, 08:58
    #32030572
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Да мне именно такой триггер и нужен. Если можно послать триггер на Snake_max@rambler.ru. Спасибо!!!
...
Рейтинг: 0 / 0
19.05.2002, 10:28
    #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
20.05.2002, 20:58
    #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
21.05.2002, 06:13
    #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
21.05.2002, 07:37
    #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
22.05.2002, 20:56
    #32031020
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Особые благодарности Jimmers, Kirk, Alexeyvg и Владимиру М.
Большое спасибо за триггеры, все работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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