Нужен Триггер на несколько таблиц

Натаsha
Дата: 06.06.2011 21:11:57
Create Trigger Trigg
on dbo.BuildingWorks
dbo.Material
on dbo.Orrder
for Insert
as
IF (SELECT dbo.Measure.MeasureID,dbo.BuildingWorks.MeasureID,dbo.Material.MeasureID,dbo.Orrder.MeasureID
FROM dbo.Measure M inner join dbo.BuildingWorks B on
M.MeasureID=B.MeasureID
inner join dbo.Material Mat on
M.MeasureID=Mat.MeasureID
inner join dbo.Orrder O on
M.MeasureID=O.MeasureID
INNER JOIN INSERTED I
ON dbo.BuildingWorks.MeasureID = I.MeasureID
inner join INSERTED I on
dbo.Material.MeasureID=I.Measure
inner join INSERTED I on
dbo.Orrder.MeasureID=I.MeasureID)=dbo.Measure.MeasureID
BEGIN
RAISERROR('Неверно введен код!', 16, 1)
ROLLBACK TRAN
END
------
Вот это чудо не хочет работать.=( Можно ли его заставить что нибудь делать?или это я изврат придумала?
pkarklin
Дата: 06.06.2011 21:14:29
автор
Можно ли его заставить что нибудь делать?

Нет.

автор
или это я изврат придумала?

Да.
Натаsha
Дата: 06.06.2011 21:24:50
Ой...А триггеры вообще можно один на несколько таблиц настроить? что все совсем плохо? может его можно модернизировать ?
pkarklin
Дата: 06.06.2011 21:29:06
Натаsha,

автор
А триггеры вообще можно один на несколько таблиц настроить?


Триггер может "пренадлежать" только одной табдице.

автор
что все совсем плохо?


Отнюдь...

автор
может его можно модернизировать ?


Не стОит. Лучше обратите свое внимание, на FOREIGN KEY Constraints.
Crimean
Дата: 06.06.2011 21:57:49
а словами сложно рассказать что нужно получить? потому как в кривом коде не совсем понятно
Натаsha
Дата: 06.06.2011 22:05:17
у меня в таблице measureID имеется список единиц измерений,я хочу чтобы когда мы добавляем строчку в 3 выше описанных таблицы, которые имеют внешние ключи measureID, и вот когда мы добираемся доэтой колонки и если воодим код которого нет в таблице measureID, григгер ругался и говорил что мы неверно ввели код. а у меня даже с одной таблицей чет не получается ничего.
londinium
Дата: 06.06.2011 22:10:57
IF OBJECT_ID(N'InsertMaterial',N'P') IS NOT NULL
  DROP PROC InsertMaterial
GO

 CREATE PROC InsertMaterial
@InMeasureID INT,
--ОСТАЛЬНЫЕ ПАРАМЕТРЫ
AS
 BEGIN
  IF(NOT EXISTS(SELECT 1 FROM dbo.Measures WHERE MeasureID=@InMeasureID))
      return -1;
 END
GO
мне кажется, так будет проще.
Crimean
Дата: 06.06.2011 22:23:48
а форин повесить - не? а после по имени форина, если есть желание, сообщение более понятно для юзеров писать
ну или назвать форин понятно :)
londinium
Дата: 06.06.2011 22:24:44
автор
а форин повесить - не?

Это святое и даже не обсуждается
Натаsha
Дата: 06.06.2011 22:27:58
Ну да проще.. только мне нужен триггер по обработке ошибок..=(( А может еще посмотрите этот:

Drop trigger OrderTrigger
CREATE TRIGGER OrderTrigger
ON dbo.Orrder
FOR INSERT
AS
declare @d datetime
IF (SELECT O.Date
FROM dbo.Orrder O INNER JOIN INSERTED I
ON O.Date = I.Date
Where @d=O.Date)=@d
BEGIN
RAISERROR('В этот день не зарегестрировано ни одного заказа!', 16, 1)
ROLLBACK TRAN
END
---
Тут я хотела, чтобы если мы запрашиваем не существующую дату регистрации заказа он тоже ругался. Вот. и Этот триггер даже успешно завершился.. ТОЛЬКО Я ПОНЯЛА ЧТО НЕ ЗНАЮ КАК ПРОВЕРИТЬ ЕГО РАБОТУ..ПОДСКАЖИТЕ ПОЖАЛУЙСТА? я думала можно написать процедурку с вводом даты, оказалось нельзя. ничего не произошло.=(((((((((((((