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

Откуда: Украина, Донецк
Сообщений: 61
Уважаемые знатоки. Подскажите пожалуйста, возможно ли написать триггер который при заполнении одного поля в записи записывает значение в следующее поле?

У меня есть таблица:
CREATE TABLE [dbo].[Грузы](
	[код_груза] [int] IDENTITY(1,1) NOT NULL,
	[код_рейса] [int] NOT NULL,
	[Вес_кг] [float] NOT NULL,
	[Заказчик] [nchar](30) NOT NULL,
	[Дата_заказа] [date] NULL,
	[код_типа_груза] [int] NOT NULL,

Дочерняя от таблицы Рейсы

Я хочу чтобы при добавлении рейса, заполнялась дата из Рейсов
Если это невозможно, то как можно организовать проверку?

Попытка написать триггер:
ALTER TRIGGER Check_date ON dbo.тГрузы
   AFTER INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON;
	BEGIN
		IF NOT EXIST (SELECT g.Дата_заказа FROM dbo.тГрузы g INNER JOIN
                      dbo.тРейсы t ON g.код_рейса = t.код_рейса)
		INSERT INTO (Дата_заказа) 
		VALUES (f.Дата_заказа)
	END
END
GO
22 дек 12, 00:48    [13669593]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на добавление записей в ту же таблицу  [new]
One_question
Member

Откуда: Украина, Донецк
Сообщений: 61
Прошу прощения.. Мне нужно всего лишь добавить ограничение чтобы поле Дата_заказа было < чем поле Дата в Рейсах
22 дек 12, 01:07    [13669669]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на добавление записей в ту же таблицу  [new]
asd24
Member

Откуда:
Сообщений: 47
Добрый день.
Я бы решил проблему через ограничители(CONSTRAINT) при создании таблицы [Грузы].
Вот рабочий вариант. Думаю, вам подойдет:
Создаем функцию, которая проверяет дату в [Рейсы]:
CREATE FUNCTION dbo.check_date (@check DATETIME)
RETURNS int
AS
BEGIN
		DECLARE @param INT
		IF EXISTS(SELECT p.[дата] FROM [Рейсы] p WHERE p.[дата] > @check)
			SET @param = 1
		ELSE
			SET @param = 0
			RETURN @param
END
GO

Таблица [Грузы]:
CREATE TABLE [dbo].[Грузы](
	[код_груза] int IDENTITY(1,1) NOT NULL,
	[код_рейса] int NOT NULL,
	[Вес_кг] float NOT NULL,
	[Заказчик] nchar(30) NOT NULL,
	[Дата_заказа] date NULL,
	[код_типа_груза] int NOT NULL,
	CONSTRAINT CK_OrderDate CHECK (dbo.check_date([Дата_заказа]) = 1)
);
24 дек 12, 17:20    [13678646]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на добавление записей в ту же таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Функция будет вызываться для каждой вставляемой/изменяемой записи,
а в триггере можно проверить сразу все такие записи.

Не уверен, что функция лучше.

А триггер в стартовом посте просто ужасный и синтаксически неправильный.
Автор не подозревает о псевдотаблицах deleted и inserted, что странно.
24 дек 12, 17:30    [13678689]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить