Нужен Триггер на несколько таблиц
Ната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
---
Тут я хотела, чтобы если мы запрашиваем не существующую дату регистрации заказа он тоже ругался. Вот. и Этот триггер даже успешно завершился.. ТОЛЬКО Я ПОНЯЛА ЧТО НЕ ЗНАЮ КАК ПРОВЕРИТЬ ЕГО РАБОТУ..ПОДСКАЖИТЕ ПОЖАЛУЙСТА? я думала можно написать процедурку с вводом даты, оказалось нельзя. ничего не произошло.=(((((((((((((