instead of update 触发器不能执行以下语句

hncxxs 2003-11-08 09:17:57
declare @sql varchar(1000)
set @sql= ' update kaoqi set code=''xs200 '''
execute()@sql
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hncxxs 2003-11-08
  • 打赏
  • 举报
回复
但是我如果直接寫update Employee set name='xs400 ' 就可以更新數據,何解?
instead 本來就是替換觸發器
zjcxc 元老 2003-11-08
  • 打赏
  • 举报
回复
表自己的instead更新自己当然不行。那样会产生递归触发。不支持的。
shanhx 2003-11-08
  • 打赏
  • 举报
回复
我觉得这里的人都很历害﹐还是自已太菜了﹐呵呵。学习ing..,,.
hncxxs 2003-11-08
  • 打赏
  • 举报
回复
CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update Employee set name=''xs400 '''
exec( @sql)

hncxxs 2003-11-08
  • 打赏
  • 举报
回复
我说的是表自己的instead更新自己 kaoqi 的instead of 更新kaoqi ,更新其他表没有问题的.
hncxxs 2003-11-08
  • 打赏
  • 举报
回复
语法检查是没有问题的,不过执行结果并没有改变数据
zjcxc 元老 2003-11-08
  • 打赏
  • 举报
回复
--肯定行啦

--测试表
create table test(id int)
create table kaoqi(code varchar(10))
go

--测试触发器
create trigger t_test on test
instead of update
as
declare @sql varchar(1000)
set @sql= 'update kaoqi set code=''xs200 '''
execute(@sql)
go

--插入数据
insert into test values(1)
insert into kaoqi values('a')

--更新以测试触发器
update test set id=1

--显示结果
select * from kaoqi

drop table test,kaoqi
wzh1215 2003-11-08
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
set @sql= ' update kaoqi set code=''xs200 '''
execute(@sql)
也可以!
hncxxs 2003-11-08
  • 打赏
  • 举报
回复
因为update语句式动态的,以上我只
是举个例子,instead 触发器好像不能执行exec(@sql)这种形式的语句。
是否有其他办法在instead 中能执行exec(@sql)这种形式的语句。
wzh1215 2003-11-08
  • 打赏
  • 举报
回复
直接用:
update kaoqi set code='xs200'
就行了!
hncxxs 2003-11-08
  • 打赏
  • 举报
回复
刚才写错了,应该是这样:
declare @sql varchar(1000)
set @sql= ' update kaoqi set code=''xs200 '''
execute(@sql)
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程,存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发器的建立与使用 一、实验目的 理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表中保存要向表中插入的所有行;当执行DELETE时,DELETED表中保存要从表中删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表中,修改后的行保存在INSERTED行中。

34,497

社区成员

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

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