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

Откуда:
Сообщений: 33
Написал триггер на добавление

USE [mydata]
GO
/****** Object:  Trigger [dbo].[s_room_modify_1]    Script Date: 05/10/2012 16:27:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER trigger [dbo].[s_room_modify_1]
on [dbo].[s_room]
instead of insert
as
    SELECT * INTO #ReplicaInserted FROM INSERTED    
    SELECT * INTO #ReplicaDeleted  FROM DELETED
    
    DECLARE @CountIns INT
    DECLARE @CountDel INT
    SELECT @CountIns = COUNT(*) FROM #ReplicaInserted
    IF @CountIns > 1 RETURN
    SELECT @CountDel = COUNT(*) FROM #ReplicaDeleted
    IF @CountDel > 1 RETURN
    
    DECLARE @ObjectName    varchar(20) = 'Action'								 
    DECLARE @ObjectNameRus varchar(30) = 'Действие'
    DECLARE @Act varchar(50)		
    DECLARE @name varchar(30)
	set @name = (select top 1 name from #ReplicaInserted)
	--Добавление
	IF @CountDel=0 and @CountIns = 1 
	BEGIN
		set @Act='Добавление'
		IF EXISTS(select 1 from s_room WHERE RTRIM(name) = RTRIM(@name))
		BEGIN 
			raiserror('1111',16,9)
		END
	END			  -----------	


смысл в том, что если в справочник попытаться добавить запись, имя которой уже там есть, будет выдаваться ошибка.Все норм, ошибка выдается, но теперь записи не добавляются в таблицу, даже если они уникальные

Сообщение было отредактировано: 10 май 12, 16:43
10 май 12, 16:39    [12531437]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Фраза instead of insert ни о чем не говорит?

Сообщение было отредактировано: 10 май 12, 16:44
10 май 12, 16:44    [12531489]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Dimon1989
Member

Откуда:
Сообщений: 33
это вроде значит "До операции". не так ли?
10 май 12, 16:46    [12531511]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Gwa
Guest
Dimon1989
это вроде значит "До операции". не так ли?

Английское instead of вообще-то всегда означало "вместо"
10 май 12, 16:50    [12531564]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
Dimon1989
это вроде значит "До операции". не так ли?

не так. это означает "вместо операции"
10 май 12, 16:51    [12531567]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
qwerty112
Guest
Dimon1989
это вроде значит "До операции". не так ли?

нет, "вместо"
10 май 12, 16:51    [12531568]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Dimon1989
Member

Откуда:
Сообщений: 33
т.е. если мне надо проверять на совпадение, я должен добавлять запись прямо в триггере?
10 май 12, 17:04    [12531702]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Dimon1989
т.е. если мне надо проверять на совпадение, я должен добавлять запись прямо в триггере?
Да.

Или делать триггер не instead of insert, а обычный.
10 май 12, 17:40    [12531924]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Dimon1989
т.е. если мне надо проверять на совпадение, я должен добавлять запись прямо в триггере?
И всё равно триггер останется просто ужасным по написанию.
Здесь мало места, чтобы всё перечислить

К примеру, зачем тут временные таблицы - понять не могу!
10 май 12, 19:03    [12532258]     Ответить | Цитировать Сообщить модератору
 Re: проблема с триггером  [new]
Dimon1989
Member

Откуда:
Сообщений: 33
дык этож моя курсовая, там чем сложнее, тем лучше....типа показываю использование временных таблиц
11 май 12, 09:09    [12534014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить