条件触发:只当我跟新某个指定字段内容时才触发。还有另外两个触发器问题。

Redball 2003-11-11 05:07:54
我在同一张表中有这么四个字段:

身份证号,出生日期,寝室,性别。

想设定两个触发器:
1,根据身份证号的插入和更新实现出生日期的自动跟新
2,通过寝室分配实现性别的填写
这两条已分别单独实现。

问:
1,当同时执行时会发生触发器嵌套32层无法继续进行,如何不通过服务器属性设置只通过在触发器内添加代码到到这个要求?
2,我只想在我跟新身份证号时触发“身份证号TO出生日期”这个触发器?同理另一个也一样。
3,能否触发器的执行结果不影响其它的行。就是说,我在更新某一个资料时系统不会把其他的行也触发一遍。
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-11-11
  • 打赏
  • 举报
回复
用update(字段名)可以判断指定的字段是否被更新.
Redball 2003-11-11
  • 打赏
  • 举报
回复
CREATE TRIGGER [身份证号TO出生日期] ON dbo.学生
FOR INSERT, UPDATE
AS
update 学生
set 出生日期 = (case len (身份证号) when 15 then '19'+substring(身份证号,7,6)
when 18 then substring(身份证号,7,8)
else '19000101' end)


在哪里加
if update(身份证号)

pengdali 2003-11-11
  • 打赏
  • 举报
回复
如:

create table 表 (a int,b int)
go
insert 表 values (1,2)
go
CREATE TRIGGER 名 ON 表
FOR UPDATE
AS
if update(a)
begin
select a 更新前a被删除的数据 from deleted
select a 更新后a被插入的数据 from inserted
end
if update(b)
begin
select a 更新前b被删除的数据 from deleted
select a 更新后b被插入的数据 from inserted
end
go
------------测试:
update 表 set a=3
-----------------
update 表 set b=4
pengdali 2003-11-11
  • 打赏
  • 举报
回复
2,我只想在我跟新身份证号时触发“身份证号TO出生日期”这个触发器?同理另一个也一样。
if update(身份证号)
begin
...
end
3,能否触发器的执行结果不影响其它的行。就是说,我在更新某一个资料时系统不会把其他的行也触发一遍
if update(列名)
begin
update 表 set 列='xx' where 主键 in (select 主键 from inserted)
end
shuiniu 2003-11-11
  • 打赏
  • 举报
回复
1.将1和2合并
2.if update(身份证号)
3.???
txlicenhe 2003-11-11
  • 打赏
  • 举报
回复
1:
好象不行
2:
if update(身份证号)
...
3:
update ... where .. 主键 in (select 主键 from inserted)

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧