关于编写触发器的问题

erlengzi2003 2004-05-04 06:08:05
我现在有一个表,一个字段里存储的是视图的名字,我想在删除表中一条记录的同时,与这条记录相关的视图也一并删除,怎么做?

我想过编写触发器,但是我不知道怎么样获取当前正在被删除的记录的那个字段里值。

望高手不吝赐教。
...全文
62 22 打赏 收藏 举报
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
erlengzi2003 2004-05-05
好!
  • 打赏
  • 举报
回复
zjcxc 2004-05-05
用多了就会了,多看别人提出的问题,多看联机帮助,自己多动手
  • 打赏
  • 举报
回复
erlengzi2003 2004-05-05
谢谢!

还想问个额外的问题。

我对于数据库的理论知识还是知道一点,什么触发器呀,存储过程,视图,约束,断言什么的,也可以把这些概念用于设计当中去,但是就是实际实现的时候经常遇到问题,我通常的做法就是查看帮助文挡,或者到论坛上求救,我看你在这方面是个专家,你能不能告诉我,怎么样把这一块学好呢?有什么值得推荐的书籍,或者方法?
  • 打赏
  • 举报
回复
zjcxc 2004-05-05
差不多
  • 打赏
  • 举报
回复
erlengzi2003 2004-05-05
inserted表
deleted 表

是不是相当于临时表的意思,用于缓存与此次更新相关的记录的值?

  • 打赏
  • 举报
回复
zjcxc 2004-05-05
当然不是,更新就是:
inserted表中记录了更新后记录的值
deleted 表中记录了更新前记录的值



一次性插入多条语句当然是可能的啦,是否用游标看你的处理要求,如果能直接处理,就直接处理,如果要逐条处理,就用游标.
  • 打赏
  • 举报
回复
erlengzi2003 2004-05-05
有没有可能一次性插入多条语句的可能,如果有,是不是也要用到游标?处于保险。
  • 打赏
  • 举报
回复
erlengzi2003 2004-05-05
知道了,谢谢!

更新是不是就是:updated
  • 打赏
  • 举报
回复
zjcxc 2004-05-05
注意,上面的 deleted,inserted表是触发器中特有的逻辑表,只能在触发器中操作.
  • 打赏
  • 举报
回复
zjcxc 2004-05-05
取得正在被删除的行的信息
select * from deleted


在被添加行的信息
select * from inserted
  • 打赏
  • 举报
回复
erlengzi2003 2004-05-05
谢谢各位的指点,我已经解决问题了!、

我是我现在还有个问题,我已经怎么样取得正在被删除的行的信息(deleted),但是怎么样知道正在被添加行的信息呢?

  • 打赏
  • 举报
回复
quansui 2004-05-05
up
  • 打赏
  • 举报
回复
zheninchangjiang 2004-05-04
谢谢邹健老师
  • 打赏
  • 举报
回复
zheninchangjiang 2004-05-04
:)
  • 打赏
  • 举报
回复
8992026 2004-05-04
斑竹考虑的周到,用临时表倒是可以做到,但是没有必要写了,还是用游标吧

  • 打赏
  • 举报
回复
zjcxc 2004-05-04
不用游标,如果删除的记录多的话,就会出错,所以保险的办法还是用游标.
  • 打赏
  • 举报
回复
8992026 2004-05-04
抄错了,更正一下:

create trigger tr_delete on 表
for delete
as
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+' if exists(select 1 from sysobjects where name='''
+字段+''' and xtype=''V'') drop view ['+字段+'] '
from deleted

exec(@sql)


  • 打赏
  • 举报
回复
8992026 2004-05-04
不用游标:

create trigger tr_delete on 表
for delete
as
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+' if exists(select 1 from sysobjects where name='''
+字段+''' and xtype=''V'') drop view ['+字段+']'
from deleted

exec(@s)
  • 打赏
  • 举报
回复
zjcxc 2004-05-04
上面的触发器中,字段就是你记录视图名字段名

deleted就是记录了被删除的记录

定义游标是为了处理同时处理多条记录的情况.
  • 打赏
  • 举报
回复
zheninchangjiang 2004-05-04
--改一下
create trigger trg_delete_tblname on tblname
for delete
as
begin
declare @sql varchar(8000)
set @sql=''
select @sql='if exists(select 1 from sysobjects where name='''+colname+''' and xtyle=''v'') drop view '+colname+' ' from deleted
exec(@sql)
end
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
疑难问题
加入

2.1w+

社区成员

MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
申请成为版主
帖子事件
创建了帖子
2004-05-04 06:08
社区公告
暂无公告