Я хочу выполнить сравнение, если @ accid2 не равно @accid, тогда откат действия, иначе выполнить вставку.Если другое выражение не работает
Мой результат этого триггера даже не совпадает, но он все еще вставляется в мой стол.
вот мой код:
ALTER TRIGGER [dbo].[TG_checkacctypehtl]
ON [dbo].[Accommodation_Hotel] INSTEAD OF INSERT
AS
DECLARE @accid NVARCHAR(50), @accid2 NVARCHAR(50),@hid NVARCHAR(50),@fsp NVARCHAR(50), @fc NVARCHAR(50), @sr NVARCHAR(50);
SELECT @hid = i.hotel_id FROM INSERTED i;
SELECT @fsp = i.facillities_swimming_pool FROM INSERTED i;
SELECT @fc = i.facillities_catering FROM INSERTED i;
SELECT @sr = i.star_rating FROM INSERTED i;
SELECT @accid2 = i.accommodation_id FROM INSERTED i;
SELECT @accid = accommodation_id FROM [dbo].[Accommodation] WHERE accommodation_type= 'hotel' AND [email protected];
BEGIN
BEGIN TRAN
SET NOCOUNT ON
PRINT @accid2
PRINT @accid
IF(@accid2 != @accid)
BEGIN
RAISERROR('Record Not Inserted, Accommodation ID is not a Hotel Id',16,1); ROLLBACK; END
ElSE BEGIN
INSERT INTO [dbo].[accommodation_hotel] (hotel_id,facillities_swimming_pool,facillities_catering,star_rating,accommodation_id)
VALUES (@hid,@fsp,@fc,@sr,@accid2);COMMIT;
END
END
* печать для проверки значения я получаю.
что моя логическая ошибка или моя синтаксическая ошибка?
Помимо точки, но, как правило, это плохая идея совершить фиксацию или откат внутри триггера. – sstan
Каковы значения для '@ accid2' и' @ accid'? – sstan
У вашего триггера есть ** ОСНОВНАЯ ** ошибка в том, что вы, кажется, считаете, что она будет называться ** один раз за строку ** - это ** не ** случай. Триггер будет срабатывать ** один раз за оператор **, поэтому, если ваш оператор 'INSERT', который вызывает этот триггер для запуска вставки 25 строк, вы получите триггер, запущенный ** один раз **, но тогда псевдо-таблица' Inserted' будет содержат 25 строк. Какой из этих 25 строк будет выбран ваш код? 'SELECT @id = u.id FROM Inserted u' - он не детерминирован, вы получите ** одну произвольную строку **, и вы будете ** игнорируете все остальные строки **. Для этого нужно переписать триггер! –