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

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

...全文
89 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2007-12-13 11:16
社区公告
暂无公告