一、今天遇到一个情况,需要在存储过程里面循环取出值,并作用于下一个语句,就接触了下游标:游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条 选择语句相关联,因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。
游标的使用分为四个基本步骤:声明游标、打开游标、提取数据、关闭游标。
DECLARE Curse_PrcItemID CURSOR FOR--声明游标(Curosr 为关键字) SELECT DISTINCT ItemId FROM dbo.ChannelSupplyDetails WHERE sp = @Bracode AND ItemId <> @ItemID OPEN Curse_PrcItemID --打开游标 WHILE @@FETCH_STATUS = 0 --返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。 begin FETCH next FROM Curse_PrcItemID INTO @temp --提取数据 SELECT @value1 = Isnull(Sum(EmployID), 0) FROM dbo.InputStore WHERE itemid = @temp AND employid <> 0 if @value1>@Count begin select @LastId=@temp close Curse_PrcItemID-- 关闭游标 break end else begin select @LastId=0 end end
二.标量值函数
标量函数返回一个确定类型的标量值。其返回值类型为除TEXT、NTEXT 、IMAGE、CURSOR、 TIMESTAMP 和TABLE 类型外的其它数据类型。
使用的时候只需要 [dbo].[Daykc](参数) 就好。
create FUNCTION [dbo].[Daykc] --[dbo]这个是不能少的 否则会不识别 ( @ItemId varchar(100) ) RETURNS int --定义返回类型 BEGIN declare @Count int select @Count=isnull(sum(sto),0) from Channel as a,ChanSup as b where a.Id=b.Id return @Count END
GO