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

Откуда:
Сообщений: 14
Где я допускаю ошибку? Не работает триггер..

имеется таблица Zakaz с полем Data_zakaza. Мне нужно создать триггер, который не будет разрешать удалять заказ, если не прошло 30 дней. Помогите доработать пожалуйста

CREATE TRIGGER not_delete
ON Zakaz INSTEAD OF DELETE
AS
BEGIN
DELETE Zakaz
FROM DELETED DE
WHERE
DateDiff(day,getdate(),Data_zakaza)<30
END



или так

CREATE TRIGGER not_delete_ ON Zakaz
INSTEAD OF DELETE
AS
BEGIN
IF DateDiff(day, getdate(), Data_zakaza) < 30
BEGIN
RAISERROR ('Nevozmozno udalit zapis!!',16,1)
ROLLBACK
END
END
7 янв 14, 22:03    [15384927]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить триггеры.. Не получается..  [new]
pkarklin
Member

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

1. Вам нужен AFTER триггер;
2. Проверять DateDiff(day, getdate(), Data_zakaza) < 30 следует обращаясь к таблице deleted.
7 янв 14, 22:07    [15384932]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить триггеры.. Не получается..  [new]
Anzela
Member

Откуда:
Сообщений: 14
pkarklin,

CREATE TRIGGER tr_no_delete
ON [dbo].[Zakaz]
AFTER DELETE
BEGIN
IF NOT EXISTS (SELECT * FROM )
BEGIN
DateDiff(day, getdate(), Deleted.[Data_Zakaza]) < 30

END

А как тогда тут правильно сделать.. Для меня эти триггеры, темный лес..)
7 янв 14, 22:25    [15384982]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить триггеры.. Не получается..  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Anzela
Для меня эти триггеры, темный лес..)


Забудьте про триггеры, пока. Для начала напишите запрос, который проверяет наличие данных по условию. И, синтаксис, он в документации описан. Фантазиям здесь не место.
7 янв 14, 22:28    [15384985]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить триггеры.. Не получается..  [new]
aleks2
Guest
CREATE TRIGGER tr_no_delete ON [dbo].[Zakaz]
AFTER DELETE
BEGIN
	IF EXISTS ( SELECT * FROM Deleted where Data_Zakaza > DATEADD( DAY, -30, getdate() ) )
	BEGIN 
		RAISERROR ( 'Nevozmozno udalit zapis!!', 16, 1 );
		ROLLBACK transaction; -- только нафига тут ROLLBACK?
	END;
END
8 янв 14, 07:35    [15385475]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить триггеры.. Не получается..  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
CREATE TRIGGER not_delete ON Zakaz INSTEAD OF DELETE AS
IF EXISTS(SELECT * FROM deleted WHERE Data_Zakaza>DATEADD(DAY,-30,GETDATE()))
 RAISERROR('Nevozmozno udalit zapis!!',16,1);
ELSE
 DELETE Zakaz
 FROM deleted d
 WHERE Zakaz.ID=d.ID;
aleks2! Прошу прощения, что текст скоммуниздил!

А может, так?
CREATE TRIGGER not_delete ON Zakaz INSTEAD OF DELETE AS
DECLARE
 @CRLF NCHAR(2)=NCHAR(0x0D)+NCHAR(0x0A)
,@Trigger NVARCHAR(MAX)=N'Trigger '+QUOTENAME(SCHEMA_NAME(CAST(OBJECTPROPERTYEX(@@PROCID,'SchemaId')AS INT)))+N'.'+QUOTENAME(OBJECT_NAME(@@PROCID))+N': '
,@Mes NVARCHAR(MAX);

SELECT TOP(1) @Mes=@Trigger+N'невозможно выполнить удаление.'+@CRLF+N'Для записи ID='+CAST(ID AS NVARCHAR)+N' ещё не прошло 30 дней.'
FROM deleted
WHERE Data_Zakaza>DATEADD(DAY,-30,GETDATE());
IF @Mes IS NULL
 DELETE Zakaz
 FROM deleted d
 WHERE Zakaz.ID=d.ID
ELSE RAISERROR(@Mes,16,1);
8 янв 14, 12:52    [15385858]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить