Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
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
------
Вот это чудо не хочет работать.=( Можно ли его заставить что нибудь делать?или это я изврат придумала?
6 июн 11, 21:11    [10773261]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Можно ли его заставить что нибудь делать?

Нет.

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

Да.
6 июн 11, 21:14    [10773275]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
Ой...А триггеры вообще можно один на несколько таблиц настроить? что все совсем плохо? может его можно модернизировать ?
6 июн 11, 21:24    [10773308]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Натаsha,

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


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

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


Отнюдь...

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


Не стОит. Лучше обратите свое внимание, на FOREIGN KEY Constraints.
6 июн 11, 21:29    [10773320]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а словами сложно рассказать что нужно получить? потому как в кривом коде не совсем понятно
6 июн 11, 21:57    [10773395]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
у меня в таблице measureID имеется список единиц измерений,я хочу чтобы когда мы добавляем строчку в 3 выше описанных таблицы, которые имеют внешние ключи measureID, и вот когда мы добираемся доэтой колонки и если воодим код которого нет в таблице measureID, григгер ругался и говорил что мы неверно ввели код. а у меня даже с одной таблицей чет не получается ничего.
6 июн 11, 22:05    [10773416]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
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
мне кажется, так будет проще.
6 июн 11, 22:10    [10773437]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а форин повесить - не? а после по имени форина, если есть желание, сообщение более понятно для юзеров писать
ну или назвать форин понятно :)
6 июн 11, 22:23    [10773480]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
а форин повесить - не?

Это святое и даже не обсуждается
6 июн 11, 22:24    [10773485]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
Ну да проще.. только мне нужен триггер по обработке ошибок..=(( А может еще посмотрите этот:

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

Откуда:
Сообщений: 14
Ну да проще.. только мне нужен триггер по обработке ошибок..=(( А может еще посмотрите этот:

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

Откуда:
Сообщений: 14
Ну да проще.. только мне нужен триггер по обработке ошибок..=(( А может еще посмотрите этот:

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

Откуда:
Сообщений: 14
Извините, перестаралась с ответом.. а что такое форин?
6 июн 11, 22:34    [10773519]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
а что такое форин?

Foreign key =внешний ключ
6 июн 11, 22:35    [10773521]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
А, внешний ключ.=) а что с ним не так?
6 июн 11, 22:42    [10773544]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
а что с ним не так?

не знаю.У каждого по своему.
А давайте Вы приведете скрипты создания таблиц и подробно расскажете, что куда надо вставить и какие проверки данных сделать
6 июн 11, 22:47    [10773556]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
Первый триггер использует таблицы-
ЕДИНИЦА ИЗМЕРЕНИЯ

Create Table [dbo].[Measure](
[MeasureID] [int] Not Null,
[MeasureName] [varchar](50),
Constraint [PK_Measure] Primary Key Clustered
(
[MeasureID] ASC
)
)On [Primary]
Go
---
содержит список единиц измерения.

СТРОИТЕЛЬНЫЕ РАБОТЫ

Create Table [dbo].[BuildingWorks](
[BuildingWorksID] [int] Not Null,
[Kind] [varchar](50) Not Null,
[Effort] [int] Not Null,
[MeasureID] [int] Not Null,
[EmployeeNumber] [int] Not Null,
[CostOfWorks] [int] Not Null,
Constraint [PK_BuildingWorks] Primary Key Clustered
(
[BuildingWorksID] ASC
)
)On [Primary]
Go

---
Хочу чтобы при добавлении новой строки сюда, когда заполняем колонку MeasureID, если введем не существующий в таблице ЕДИНИЦА ИЗМЕРЕНИЯ единицу, с помощью триггера выскакивала ошибка.. но это наверное слишком мелко, чтобы использовать триггер...=(((
6 июн 11, 23:14    [10773626]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
Не то, чтобы мелко. Просто я бы вынес вставку в таблицу в хранимую процедуру, в которой бы перед вставкой выполнил бы все необходимые проверки. Примерно так:
IF OBJECT_ID(N'InsertBuildingWorks',N'P') IS NOT NULL
 DROP PROC InsertBuildingWorks
go

CREATE PROC InsertBuildingWorks
@InKind VARCHAR(50),
@InEffort INT,
@InMeasureID INT,
@InEmployeeNumber INT,
@InCostOfWorks INT
AS
 BEGIN
  IF(NOT EXISTS(SELECT 1 FROM dbo.Measure WHERE Measure_ID=@InMeasureID))
      RETURN -1;
  --И ТАК ДАЛЕЕ
 END
GO
6 июн 11, 23:40    [10773730]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Натаsha
Member

Откуда:
Сообщений: 14
ааа..
7 июн 11, 00:47    [10773961]     Ответить | Цитировать Сообщить модератору
 Re: Нужен Триггер на несколько таблиц  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
триггера - зло
7 июн 11, 00:59    [10773989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить