游标加标量函数

一、今天遇到一个情况,需要在存储过程里面循环取出值,并作用于下一个语句,就接触了下游标:游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条 选择语句相关联,因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。

游标的使用分为四个基本步骤:声明游标、打开游标、提取数据、关闭游标。

 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

  

原文地址:https://www.cnblogs.com/ypyhy/p/4810856.html