导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

新手求一触发器写法(存储过程也行)

pc372 2007-12-13 11:16:47
表ag
Id wUrl Uid IsTop
---------------------------
1 75 2 1
2 75 null 0
3 76 null 1
4 77 null 0

删除Id=1时,将Id=2的IsTop=1
正常删除Id=2
同时删除Id=1,Id=2时,保留其中一行,并将Uid=null,IsTop=1
删除Id=3时,不变动,即保留Id=3的数据(因为wUrl=76的记录只有一条)
删除Id=4时,保留Id=4,并将其IsTop=1

...全文
71 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2007-12-13
你说的这么难,不如说你这表是用来干什么的吧.
我看到你的istop和一些描述,猜出来一点点.
回复
-狙击手- 2007-12-13
sorry ,加一个条件


create trigger triggername
on ag
INSTEAD OF delete
as
begin
if exists(select wUrl from ag group by wUrl having count(1) > 1)
begin
delete from ag where exists(select 1 from inserted)
insert ag select top 1 wUrl,null,1 from inserted
end
else
update ag set Uid = null ,IsTop = 1
end
回复
pc372 2007-12-13
无论怎么删除
表中都要有Wurl=75,76,77的记录
并且表中只有一行Wurl=75时保证这行的IsTop=1
回复
-狙击手- 2007-12-13
create trigger triggername
on ag
INSTEAD OF delete
as
begin
if exists(select wUrl from ag group by wUrl having count(1) > 1)
begin
delete from ag
insert ag select top 1 wUrl,null,1 from inserted
end
else
update ag set Uid = null ,IsTop = 1
end
回复
xiaxia421 2007-12-13
还是没看懂你要说什么

回复
pc372 2007-12-13
哎呀~
表达能力有严重问题,抱歉抱歉。
回复
pc372 2007-12-13
Wurl有重复的如果全部都删除了,就新添加一行,这行的Wurl等于刚刚删除行的Wurl,并且设置这行的Uid=null,IsTop=1
如果Wurl值只有一行的,删除时也将这行的Uid=null,IsTop=1
回复
pc372 2007-12-13
有重复的就如果全部都删除了,就新添加一行,这行的Wurl等于刚刚删除行的Wurl,并且设置这行的Uid=null,IsTop=1
回复
dawugui 2007-12-13
没看懂,帮顶.
回复
-狙击手- 2007-12-13
是不是删除时有重复就删除其中一条,并不留下的istop = 1?
回复
pc372 2007-12-13
表ag
Id wUrl Uid IsTop
------------------------------------------------------
1 75 2 1
2 75 null 0
3 76 null 1
4 77 null 0

表中wUrl字段是表示城市的链接地址,uid是这个城市的客户,IsTop=1时为该城市的代理商,否则为普通客户
现在要保证每个城市默认都有一个IsTop字段的值为1,以便在前台能正常显示每个省的城市列表;
一个城市可以增加多个客户;没有代理的时候uid的值默认为null,删除一个城市的所有客户的时候,需要保留一行默认值。
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告