触发器中执行exec @SQl时出错

breadjyh 2006-10-18 11:33:47
触发器中定义如下
declare @Sql as varchar(8000)
set @sql='update ...'
exec @sql
if @@error<>0
begin
raiserror('更新时出错',16,1)
rollback tran
end
....
执行时不报错,但是数据只能存一行,其他的数据丢失
将exec @sql注释掉就没问题,后将此@SQL变量保存在表中然后将exec @sql替换成保存下来的SQL语句,再运行就没问题了










...全文
263 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
breadjyh 2006-10-21
  • 打赏
  • 举报
回复
经测试发现是写错了,哈哈,应该加括号的
njz168(飞龙在天) 说对了
njz168 2006-10-19
  • 打赏
  • 举报
回复
exec (@sQL)
hellowork 2006-10-19
  • 打赏
  • 举报
回复
使用EXEC执行的SQL字符串中如果有更新语句,要把事务也放到SQL字符串中,这样才能控制更新操作在一个事务中.例如这样:

CREATE TRIGGER 触发器名称 on 表名
FOR 触发器类型
AS
declare @Sql varchar(8000)
set @Sql =
'begin transaction
update ...
if @@error <> 0
begin
raiserror(''更新时出错'',16,1)
rollback
end
else
commit transaction'
EXEC(@Sql)

GO
点点星灯 2006-10-18
  • 打赏
  • 举报
回复
修改时执行的Sql语句是变化的

--建议先将SQL语句print出来,根据具体的情况在去判断.
breadjyh 2006-10-18
  • 打赏
  • 举报
回复
好好看看行不,求你了,不是批量修改,就是修改时执行的Sql语句是变化的
点点星灯 2006-10-18
  • 打赏
  • 举报
回复
楼主,是不是批量修改数据,结果只有一行有影响,其它的没有发生改变.

触发器是这样的,不支持批量,只支持一次修改 删除一条记录.

22,209

社区成员

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

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