请问一个触发器是否要使用游标的问题

rawjim 2005-12-31 10:31:34
触发器响应Insert,要处理每条记录,需要使用游标吗?
这里使用游标,是不是多余的?请指教
我是这样写的。
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

-- 新建触发器
ALTER trigger trig_level_ST_River_R -- 触发器名称
on [zj_sy_st].dbo.ST_River_R -- 对应的表名
for insert
as
begin
-- 触发器语句块--------------------------------------------------------------开始
SET NOCOUNT ON
declare @stcd varchar(8) -- 站点ID
declare @YMDHM datetime -- 当前所对应的时间
declare @ZR decimal(8,2) -- 水位

-- 定义一个查询逻辑表的游标
declare level_cursor cursor local for select stcd,YMDHM,ZR from inserted
open level_cursor
fetch next from level_cursor into @stcd,@YMDHM,@ZR
while @@fetch_status=0
begin
-- 循环游标
-- 执行存储过程
set @stcd=rtrim(@stcd)
set @stcd=lower(@stcd)
if DATEADD( hh , -3, getdate()) <= @YMDHM
exec [oa].dbo.proc_warnning_site_level @stcd,@YMDHM,@ZR,'河道'
fetch next from level_cursor into @stcd,@YMDHM,@ZR
end
-- 关闭游标
close level_cursor
-- 释放游标
DealLocate level_cursor
-- 触发器语句块--------------------------------------------------------------结束
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgis2001 2005-12-31
  • 打赏
  • 举报
回复
在这个业务逻辑段中建议写个存储过程,在这里调用就可以了。
rawjim 2005-12-31
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘),你发了,SQL Server版给了你90分,这里再给你200分,另祝元旦快乐。
子陌红尘 2005-12-31
  • 打赏
  • 举报
回复
呵呵,过来蹭点分,需要,原因见SQL Server版的说明。
竹林听雨2005 2005-12-31
  • 打赏
  • 举报
回复
游标

关系数据库中的操作会对整个行集产生影响。由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行。由语句所返回的这一完整的行集被称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。

游标通过以下方式扩展结果处理:

允许定位在结果集的特定行。


从结果集的当前位置检索一行或多行。


支持对结果集中当前位置的行进行数据修改。


为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。


提供脚本、存储过程和触发器中使用的访问结果集中的数据的 Transact-SQL 语句。
竹林听雨2005 2005-12-31
  • 打赏
  • 举报
回复
首先指出:帖子应发至SQL栏目里。。

另外,使用游标应该效果更好

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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