避免SQL Server 触发器死循环
2008-03-12 10:47
731 查看
避免SQL Server 触发器死循环
标签:
sql server数据库存储sql
2008-03-12 10:47
3354人阅读 评论(1)
收藏
举报
本文章已收录于:
分类:
数据库(28)
作者同类文章X
版权声明:本文为博主原创文章,转载请注明出处。
在使用SQL Server时,有时候希望针对数据表中某一字段的修改执行一段触发器代码,比如修改了人员名称时,我们希望数据库会自动执行一代码来修改同一数据表中的姓名拼音首字母字段。如果使用After Update触发器则会让SQL Server崩溃掉,那么有什么办法可以避免这种死循环吗?答案是肯定的,我可以在触发器中判断用户是否修改了姓名字段,如果是则执行后续更新代码,如果用户修改了其他字段,则不执行任何代码。
假设有一张表存储客户的信息,第一个字段是Visitor_ID,第二个字段Visitor_Name,第三个字段是Visitor_PY_Code。我们针对新增和更新动作写两个触发器。
针对新增的触发器很容易写,现在的问题是在更新的触发器,如果再使用Update语句就会循环执行触发器了,系统会崩溃掉的。我们希望只针对单一字段的更新执行触发器。还好SQL提供了COLUMNS_UPDATED()函数,能够判断出哪一字段被更新。于是将更新的触发器写成如下:
CREATE TRIGGER [UpdatePYCodeOnly] ON [dbo].[Visitor]
FOR UPDATE
AS
IF (COLUMNS_UPDATED() & 2) = 2 BEGIN
declare
@VisitorID int,
@NameStr nvarchar(50)
Select @VisitorID = Visitor_ID, @NameStr = Visitor_Name From Inserted
Update Visitor Set NamePINYIN = dbo.GetPYCode(@NameStr) Where Visitor_ID = @VisitorID
END
在使用COLUMNS_UPDATED()函数需要注意以下几点:
表中第一个字段序号为0,第二个字段序号为1,依此类推
表中的字段顺序不要改动
2008-04-10 15:07发表
[回复] [引用]
[举报]
if update(fieldname) ......
就可以了,这样就不怕字段顺序改变
顶0踩0
上一篇关系代数五种基本操作和四程组合操作
下一篇IBM Windows Key
标签:
sql server数据库存储sql
2008-03-12 10:47
3354人阅读 评论(1)
收藏
举报
本文章已收录于:
分类:
数据库(28)
作者同类文章X
版权声明:本文为博主原创文章,转载请注明出处。
在使用SQL Server时,有时候希望针对数据表中某一字段的修改执行一段触发器代码,比如修改了人员名称时,我们希望数据库会自动执行一代码来修改同一数据表中的姓名拼音首字母字段。如果使用After Update触发器则会让SQL Server崩溃掉,那么有什么办法可以避免这种死循环吗?答案是肯定的,我可以在触发器中判断用户是否修改了姓名字段,如果是则执行后续更新代码,如果用户修改了其他字段,则不执行任何代码。
假设有一张表存储客户的信息,第一个字段是Visitor_ID,第二个字段Visitor_Name,第三个字段是Visitor_PY_Code。我们针对新增和更新动作写两个触发器。
针对新增的触发器很容易写,现在的问题是在更新的触发器,如果再使用Update语句就会循环执行触发器了,系统会崩溃掉的。我们希望只针对单一字段的更新执行触发器。还好SQL提供了COLUMNS_UPDATED()函数,能够判断出哪一字段被更新。于是将更新的触发器写成如下:
CREATE TRIGGER [UpdatePYCodeOnly] ON [dbo].[Visitor]
FOR UPDATE
AS
IF (COLUMNS_UPDATED() & 2) = 2 BEGIN
declare
@VisitorID int,
@NameStr nvarchar(50)
Select @VisitorID = Visitor_ID, @NameStr = Visitor_Name From Inserted
Update Visitor Set NamePINYIN = dbo.GetPYCode(@NameStr) Where Visitor_ID = @VisitorID
END
在使用COLUMNS_UPDATED()函数需要注意以下几点:
表中第一个字段序号为0,第二个字段序号为1,依此类推
表中的字段顺序不要改动
2008-04-10 15:07发表
[回复] [引用]
[举报]
if update(fieldname) ......
就可以了,这样就不怕字段顺序改变
顶0踩0
上一篇关系代数五种基本操作和四程组合操作
下一篇IBM Windows Key
相关文章推荐
- 避免SQL Server 触发器死循环
- sql创建触发器,避免死循环
- SQL Server 结果集循环处理的 避免游标处理方法
- SQL server 触发器,在触发Merge过程中,逐行触发的解决办法 用group by 避免是一次触发中的多行更新或删除。
- SQL SERVER 建临时表、循环插入数据、游标遍历数据库
- 查看SQL SERVER 加密存储过程,函数,触发器,视图
- sql server 循环插入一些测试数据
- Sql Server 触发器
- SQL Server 触发器
- 批量删除Sql Server对象(表,存储过程,触发器)
- SQL Server 2000中的触发器使用2
- SQL Server 2000中的触发器使用
- SQL Server 文档整理 - 3 触发器调用存储过程
- sql server 2008学习13 触发器
- sql server 2008 触发器编写过程
- SQL Server 触发器
- SQL Server 2008中文版标准教程读书笔记 存储过程与触发器(复习SQL Server 六)
- SQL Server 触发器
- SQL Server 触发器
- SQL Server中递归触发器中使用游标如何设置