|
|
|
Триггер
|
|||
|---|---|---|---|
|
#18+
Вы имеете ввиду триггер, который бы при попытке добавить запись в таблицу проверял бы, что в таблице не существует записи с аналогичными значениями всех полей (и откатывал бы транзакцию в случае нахождения такой записи)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2002, 19:21 |
|
||
|
Триггер
|
|||
|---|---|---|---|
|
#18+
Да мне именно такой триггер и нужен. Если можно послать триггер на Snake_max@rambler.ru. Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2002, 08:58 |
|
||
|
Триггер
|
|||
|---|---|---|---|
|
#18+
несколько странная постановка, но 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 - имена полей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2002, 10:28 |
|
||
|
Триггер
|
|||
|---|---|---|---|
|
#18+
Итак, есть база данных 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 ключевым, но мне нужен триггер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 20:58 |
|
||
|
Триггер
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 06:13 |
|
||
|
Триггер
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 07:37 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1822634]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
204ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 526ms |

| 0 / 0 |
