过程中逻辑表(DELETED,INSERTED)的一些问题

时间:2014-04-23 17:52:36

标签: sql-server stored-procedures

我尝试在程序中使用逻辑表,但我有错误:

  

"无效的对象名称DELETED"

所以第一个问题我可以在程序中使用逻辑表吗? 如果是,我该怎么做?

这是一个代码

USE Operator
GO
CREATE PROCEDURE generuj ( @nazwaTabeli VARCHAR(20) )
AS
BEGIN
SET NOCOUNT ON;

--
-- Check if this is an INSERT, UPDATE or DELETE Action.
-- 
DECLARE @action as char(1);

SET @action = 'I'; -- Set Action to Insert by default.
IF EXISTS(SELECT * FROM DELETED) --Invalid object name DELETED
BEGIN
    SET @action = 
        CASE
            WHEN EXISTS(SELECT * FROM INSERTED) -- Invalid object name INSERTED
THEN 'U' -- Set Action to Updated.
            ELSE 'D' -- Set Action to Deleted.       
        END


END



        INSERT INTO TBLLOGI (UZYTKOWNIK,NAZWATABELI,DATAOPERACJI,TYPOPERACJI)
        VALUES (SYSTEM_USER,@nazwaTabeli,SYSDATETIME(),@action)


END

我从这个主题Click获得了它 我想在触发器上使用这个程序,看起来像这样

CREATE TRIGGER trgLogi 
ON TBLABONENCI
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
EXEC generuj  TBLABONENCI
END;

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

inserteddeleted虚拟表仅在触发器中或作为OUTPUT子句的一部分可用。如果您的触发器正在调用过程,则应首先将它们保存到表中以在过程内使用它们