ALTER
TRIGGER [tgr_del_into_plan_audit]
ON [dbo].[agent_plan_details]
AFTER DELETE
AS
declare @plan_title_id int;
declare @plan_title varchar(50);
declare @no_of_property_listing int;
declare @validity_of_plan int;
declare @Each_property_listing_life int;
declare @list_of_property_in_search_result int;
declare @price decimal(8,2);
declare @discount BIT;
declare @discount_code varchar(10);
declare @discount_percentage int
select @plan_title_id=d.plan_title_id from deleted d;
select @plan_title=d.plan_title from deleted d;
select @no_of_property_listing=d.no_of_property_listing from deleted d;
select @validity_of_plan=d.validity_of_plan from deleted d;
select @Each_property_listing_life=d.Each_property_listing_life from deleted d;
select @list_of_property_in_search_result=d.list_of_property_in_search_result from deleted d;
select @price=d.price from deleted d;
select @discount=d.discount from deleted d;
select @discount_code=d.discount_code from deleted d;
select @discount_percentage=d.discount_percentage from deleted d;
BEGIN
SET NOCOUNT ON
INSERT INTO agent_plan_details_audit
(plan_title_id,
plan_title,
no_of_property_listing,
validity_of_plan,
Each_property_listing_life,
list_of_property_in_search_result,
price,
discount,
discount_code,
discount_percentage,
create_date,
action)
VALUES
(@plan_title_id,
@plan_title,
@no_of_property_listing,
@validity_of_plan,
@Each_property_listing_life,
@list_of_property_in_search_result,
@price,
@discount,
@discount_code,
@discount_percentage,
GETDATE(),
'D')
END
ответ
См. CREATE TRIGGER
.
CREATE TRIGGER TRIG_SomeTable_Delete
ON SomeTable AFTER DELETE
AS
BEGIN
INSERT INTO SomeTable(SomeColumn)
SELECT SomeColumn FROM DELETED
END
DELETED
может содержать несколько строк, поэтому использовать SELECT
вместо этого.
В вашем случае:
ALTER TRIGGER [tgr_del_into_plan_audit]
ON [dbo].[agent_plan_details]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO agent_plan_details_audit
(
plan_title_id,
plan_title,
no_of_property_listing,
validity_of_plan,
Each_property_listing_life,
list_of_property_in_search_result,
price,
discount,
discount_code,
discount_percentage,
create_date,
action
)
SELECT
plan_title_id,
plan_title,
no_of_property_listing,
validity_of_plan,
Each_property_listing_life,
list_of_property_in_search_result,
price,
discount,
discount_code,
discount_percentage,
GETDATE(),
'D'
FROM DELETED
END
deleted
может содержать множественные строки. Таким образом, присвоение значений из столбцов в нем скалярной переменной равно .
Try, вместо:
ALTER
TRIGGER [tgr_del_into_plan_audit]
ON [dbo].[agent_plan_details]
AFTER DELETE
AS
SET NOCOUNT ON
INSERT INTO agent_plan_details_audit
(plan_title_id,
plan_title,
no_of_property_listing,
validity_of_plan,
Each_property_listing_life,
list_of_property_in_search_result,
price,
discount,
discount_code,
discount_percentage,
create_date,
action)
SELECT
plan_title_id,
plan_title,
no_of_property_listing,
validity_of_plan,
Each_property_listing_life,
list_of_property_in_search_result,
price,
discount,
discount_code,
discount_percentage,
GETDATE(),
'D'
FROM
deleted
Кто-то обязан указать некоторый край случай, когда он не ошибка иметь такое заявление в качестве триггера:
select @plan_title_id=d.plan_title_id from deleted d;
Но такие обстоятельства, безусловно, y - Я не могу думать ни о чем с головы.
Каждые из этих SELECT
с в текущем запросе будет выбрать значение из произвольной строки deleted
- это даже не гарантируется, что каждые из SELECT
с бы получить значение из же произвольной строки.
Спасибо, сэр. Работает. –
И какая система баз данных для этого? Триггеры не стандартизированы, а тег 'sql' - для стандартного языка SQL. Кроме того, поскольку вы уже создали частично рабочий триггер, где код? –
Покажите нам свой спусковой крючок. :) – Leri
Если вы разместите свой текущий код, мы сможем его исправить. –