Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 理解数据库触发器_Sql Server_Triggers_Database Cursor - Fatal编程技术网

Sql server 理解数据库触发器

Sql server 理解数据库触发器,sql-server,triggers,database-cursor,Sql Server,Triggers,Database Cursor,我不熟悉触发器和游标,希望了解特定触发器的作用。这是扳机 CREATE TRIGGER [dbo].[trg_XOnUpdate] ON TableX AFTER UPDATE AS BEGIN SET NOCOUNT ON DECLARE @XID INT, @XKey NVARCHAR(33) DECLARE updated_cursor CURSOR FOR SELECT XID, XKey FROM INSERTE

我不熟悉触发器和游标,希望了解特定触发器的作用。这是扳机

CREATE TRIGGER [dbo].[trg_XOnUpdate]
ON TableX
AFTER UPDATE 
AS 
BEGIN
    SET NOCOUNT ON
    DECLARE @XID INT, @XKey NVARCHAR(33)

    DECLARE updated_cursor CURSOR FOR 
        SELECT  XID, XKey 
        FROM    INSERTED 
        WHERE   XStatus 
        IN      ('AA', 'BB', 'CC')
    OPEN updated_cursor

    FETCH NEXT FROM updated_cursor INTO @XID, @XKey
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXECUTE usp_UpdateXData @XID, @XKey

        FETCH NEXT FROM updated_cursor INTO @XID, @XKey
    END

    CLOSE updated_cursor
    DEALLOCATE updated_cursor
END

了解触发器的基本原理
触发器是在数据库发生某种事件时执行的操作。它可以是数据或对象更改。下面列出了不同类型的老虎机:

触发器类型

  • DML(数据操作语言)触发器(SQLServer2000-80.0)
  • DDL(数据定义语言)触发器(SQLServer2005-90.0)
  • SQLCLR触发器(SQLServer2005-90.0)
触发规则

  • 无法使用触发器创建或修改数据库对象

  • 无法执行任何管理任务

  • 无法传递任何类型的参数

  • 无法直接调用触发器

触发器的优势
触发器对于审核数据更改或审核数据库以及管理业务规则非常有用。以下是一些例子:

  • 触发器可用于强制引用完整性(例如,您可能无法应用外键)

  • 在执行任何插入、更新或删除操作时,可以访问数据库中的新值和旧值

进一步深入了解触发器…


您不明白哪一行?@TabAlleman我知道光标正在枚举select返回的数据,其中状态为('AA','BB','CC')。我不理解下一部分的内容。。。它是说为状态为('AA','BB','CC')的ID和键执行存储过程吗?下一步获取是一个游标操作。谷歌“SQL游标示例”以获得完整的解释。理想情况下,您可以完全删除此游标,并创建一个基于集合的操作,而不是为更新的每一行调用存储过程。