大力:请帮解决这个问题:instead of update 触发器不能执行以下语句

hncxxs 2003-11-11 04:31:33
CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update Employee set name=''xs400 '''
exec( @sql)


我想使用这段触发器来代替sql的update ,可是不能更新数据,如果用
update Employee set name='xs400 '就可更新数据,不知insetead 触发器
是否支持exec(@sql)这种动态sql
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
远程Scada 2003-11-18
  • 打赏
  • 举报
回复
pb 向sqlserver 发送一条update kaoqi set name='xs400 '

CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update kaoqi set name=''xs4001 '''
exec( @sql)

---->>>>>>>
first:update kaoqi set name='xs4001 '
second:update kaoqi set name='xs400 '
so....
hncxxs 2003-11-13
  • 打赏
  • 举报
回复
TO 大力:
我是想达到这样的效果:
客户端(PB,DELPHI)向SQL提交更新kaoqi的语句(比如update kaoqi set name='xs400 ')
但是在SQL我想拦截更新语句,不要执行这条更新语句,想要我自己的处理逻辑,所以
我在kaoqi加了instead of update触发器,但是碰到这样一个问题:
我的处理逻辑需要使用动态sql来更新kaoqi自己,但是sql server执行动态sql后没有更新
kaoqi表数据。

例如:pb 向sqlserver 发送一条update kaoqi set name='xs400 '
我在sql server 建立这样一个触发器

CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update kaoqi set name=''xs4001 '''
exec( @sql)

但是sql server 执行后并没有将kaoqing 的name更新成xs4001,如果在触发器里不用动态sql就可以更新,比如直接写update kaoqi set name='xs4001 '就可以。


pengdali 2003-11-13
  • 打赏
  • 举报
回复
不懂你说什么,描述清楚些吧。
hncxxs 2003-11-12
  • 打赏
  • 举报
回复
唉.....自己頂一下
hncxxs 2003-11-12
  • 打赏
  • 举报
回复
高高手都那裡去了?
hncxxs 2003-11-11
  • 打赏
  • 举报
回复
TO 大力:
剛才寫錯了

CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update kaoqi set name=''xs400 '''
exec( @sql)



我現在是想更新kaoqi表,在instead更新其他表是沒有問題的,
我是想update獲,在instead中有選擇的更新本身表(kaoqi)字段,
請再指教.
pengdali 2003-11-11
  • 打赏
  • 举报
回复
create table kaoqi(name varchar(10))
create table Employee(name varchar(10))
go
CREATE TRIGGER trg_upd ON [dbo].[kaoqi]
instead of update
AS
declare @sql varchar(1000)
set @sql= ' update Employee set name=''xs400 '''
exec( @sql)
go
insert Employee values('a')
go
update kaoqi set name='s'
go
select * from Employee

/*
name
----------
xs400

(所影响的行数为 1 行)
*/

34,668

社区成员

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

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