2013-06-25 4 views
-5
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 
+0

И какая система баз данных для этого? Триггеры не стандартизированы, а тег 'sql' - для стандартного языка SQL. Кроме того, поскольку вы уже создали частично рабочий триггер, где код? –

+0

Покажите нам свой спусковой крючок. :) – Leri

+0

Если вы разместите свой текущий код, мы сможем его исправить. –

ответ

4

См. 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 
3

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 с бы получить значение из же произвольной строки.

+0

Спасибо, сэр. Работает. –