关于编写触发器的问题

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

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

望高手不吝赐教。
...全文
85 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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