这里说的触发器和游标的使用在sqlserver2000和sqlserver2005中测试通过,鄙人认为触发器也算是一种存储过程,触发器是在数据库中自动触发,而存储过程需要的程序中调用,语法和用法上来说应该是大同小异的,对sql的功底不深,请恕在下在此妄加猜测,直接看代码和注释。
CREATE TRIGGER whenUpdate---触发器的名称 ON tableName--为表“tableName”创建触发器 FOR UPDATE--为什么事件触发,这里当然就可以是增删改等操作了 AS begin ----------下边开始触发器要干的事情 Declare @cbid float-------声明的变量 Declare @cask float-------声明的变量 Declare @ctype varchar(20)--声明的变量 ---下边三行代码代表了为三个变量赋值, ---这里要理解触发器里面的两个临时的表:Deleted , Inserted 。 ---Deleted 与Inserted分别代表 ---“tableName”表中“旧的一条记录” 和“新的一条记录”。 SET @ctype = (SELECT currencytype FROM Inserted) SET @cbid = (SELECT fex_bid FROM Inserted) SET @cask = (SELECT fex_ask FROM Inserted) Declare @sid numeric----------声明的变量 Declare @coinType varchar(255)----------声明的变量 --声明游标,cur为游标的名称 Declare cur Cursor FOR ----这里就是查询一个表中的数据,然后将结果集给游标 SELECT id AS id,coinType AS coinType FROM shoutorder WHERE 1=1 Open cur--打开游标,开始循环 --首先需要手动开始循环游标, --并将上边查询结果集中的两个值分别赋给@sid和@coinType, --主要这里的赋值是按查询字段的顺序赋值 Fetch next FROM cur INTO @sid,@coinType --------------循环体begin--------------- While @@fetch_status=0 Begin ---这里可有一些想要的操作判断等 ---if和else的写法 IF (@sid = 3 AND @coinType = 0) begin UPDATE......--这里省略很多操作 end else IF() begin end --下标下移 Fetch Next FROM cur INTO @sid,@coinType End --------------循环体end----------------- Close cur --关闭游标 --由于游标的机制是将数据全部加载到内存中然后才操作, --这里请务必释放游标 Deallocate cur end
Hell Year!