ALTER TRIGGER [RelationDeleteTrigger]
ON [dbo].[t_containment]
FOR DELETE
AS
Declare @ObjCursor cursor
Declare @ParentID int Set @ObjCursor = Cursor For
select DISTINCT [ParentId] from deleted Open @ObjCursor FETCH NEXT FROM @ObjCursor INTO @ParentID while( @@FETCH_STATUS = 0 )
Begin
exec RefreshTotalData @ParentID FETCH NEXT FROM @ObjCursor INTO @ParentID
End close @ObjCursor
deallocate @ObjCursor
ON [dbo].[t_containment]
FOR DELETE
AS
Declare @ObjCursor cursor
Declare @ParentID int Set @ObjCursor = Cursor For
select DISTINCT [ParentId] from deleted Open @ObjCursor FETCH NEXT FROM @ObjCursor INTO @ParentID while( @@FETCH_STATUS = 0 )
Begin
exec RefreshTotalData @ParentID FETCH NEXT FROM @ObjCursor INTO @ParentID
End close @ObjCursor
deallocate @ObjCursor
ALTER TRIGGER [RelationDeleteTrigger]
建立触发器的表
ON [dbo].[t_containment]
删除触发器
FOR DELETE
AS
定义游标变量
Declare @ObjCursor cursor
定义一个整型变量
Declare @ParentID int
从表deleted里给游标变量赋值
Set @ObjCursor = Cursor For
select DISTINCT [ParentId] from deleted
打开游标
Open @ObjCursor
把deleted第一行的记录赋给游标变量
FETCH NEXT FROM @ObjCursor INTO @ParentID
判断游标状态,状态一共有三种0:有记录,还有-1,-2
while( @@FETCH_STATUS = 0 )
Begin
循环执行存储过程
exec RefreshTotalData @ParentID
获取下一个游标变量赋给变量@ParentID,再次进行游标判断
FETCH NEXT FROM @ObjCursor INTO @ParentID
End
关闭游标
close @ObjCursor
删除游标
deallocate @ObjCursor
因为触发器有三种:
delete,insert,update
你的属于第一种~
最上面还有
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
这二句是什么意思
指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为。语法
SET ANSI_NULLS {ON | OFF}注释
SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。
使 Microsoft® SQL Server™ 遵从关于引号分隔标识符和文字字符串的 SQL-92 规则。由双引号分隔的标识符可以是 Transact-SQL 保留关键字,或者可以包含 Transact-SQL 标识符语法规则通常不允许的字符。语法
SET QUOTED_IDENTIFIER { ON | OFF }注释
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。当 SET QUOTED_IDENTIFIER 为 OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。在进行连接时,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 设置默认为 OFF。当创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,用于该存储过程的后续调用。当在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。当 SET ANSI_DEFAULTS 为 ON时,将启用 SET QUOTED_IDENTIFIER。
Set @ObjCursor = Cursor For
select DISTINCT [ParentId] from deleted
这里的deleted是指当前的触发器表是吗?
同样,进行更新或是插入的时候,也会生成一个inserted表