• sqlServer游标的使用


    USE [PatPD1]
    GO
    /****** Object:  UserDefinedFunction [dbo].[fun_GetConditionInner]    Script Date: 2015/5/9 9:03:38 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER function [dbo].[fun_GetConditionInner] (@Product varchar(20))
      returns  varchar(8000)
    AS
    begin
       declare @ReturnValue varchar(8000)=''--用于拼接返回值
       declare @Status varchar(8000)--用于存储状态值
       declare @Type nvarchar(20)--EQPtype
       declare @TempType nvarchar(20)--EQPtype的临时变量用于比较
       declare @temp table(
          Status nvarchar(20),
          Type nvarchar(20)
       )
        -- declare @Product nvarchar(20)--EQPtype -- 测试放开
                                       -- set @Product='8701BA'
                                       -- set @Product='8725AA-0030A'
          insert into @temp select b.Status,a.Type from [dbo].[MtfSetting] a join [dbo].[MtfDetailSetting] b on a.Id=b.Id and a.Product =@Product
      --申明游标 为EquipmentID,FixQty
    declare MTF_Cursor CURSOR FOR select Status,Type from @temp  
    --打开游标  

    open MTF_Cursor
          fetch next from MTF_Cursor into @Status,@Type --将游标向下移1行,获取的数据放入之前定义的变量@Status,@JoinCalculate中

             while  @@FETCH_STATUS = 0 --返回 FETCH 执行语句时游标的状态(1:fetch获取数据成功 -1:fetch语句失败或此行不在结果集中 -2:被提取的行不存在)  
       begin   
            if(@TempType!=@Type)--动态拼接投入数
                 begin
                    set @ReturnValue+='
                    sum(CASE WHEN EQPTYPE='''+RTrim(@TempType)+''' THEN QUANTITY ELSE 0 END)  qty_TOTAL_'+Replace(@TempType,' ','')+','
                 end

                     set @ReturnValue+='
                                sum(case when a.STATUS='''+RTrim(@Status)+''''--拼接条件头部

          if((select count(*) from [dbo].[MtfSetting]where Product=@Product)>1 )--属于多种type的组合方式,多拼接一个 a.EQPTYPE 的条件
                 begin
                   set @ReturnValue+=' and a.EQPTYPE='''+RTrim(@Type)+''''
                  end

                     set @ReturnValue+=' then QUANTITY else 0 end) qty_'+RTrim(@Status)+'_'+Replace(@Type,' ','')+','--拼接条件尾部
            set @TempType=@Type--赋值给临时存储变量
           fetch next from MTF_Cursor into @Status,@Type --将游标向下移1行
       end
    close MTF_Cursor--关闭游标  
    deallocate MTF_Cursor--释放游标  


     if((select count(*) from [dbo].[MtfSetting]where Product=@Product)>1 )--属于多种type的组合方式
       begin
         set @ReturnValue+='
                    sum(CASE WHEN EQPTYPE='''+RTrim(@TempType)+''' THEN QUANTITY ELSE 0 END)  qty_TOTAL_'+Replace(@TempType,' ','')
       end
       else
       begin
       set @ReturnValue+='
                    sum(QUANTITY)  qty_TOTAL_'+Replace(@TempType,' ','')
       end
    --print @ReturnValue
      return @ReturnValue
     
    end



     

  • 相关阅读:
    收集珠子
    压缩变换(程序设计)
    动态规划-树上dp-1757. 搜集钻石
    动态规划-1620. 收集硬币
    动态规划-状态压缩-707. 最优账户结余
    图-1400. 图的费马点
    数学-快速幂
    计算几何-5361. 圆和矩形是否有重叠
    图-搜索-dfs-739. 24点
    图-dfs-连通分量-旋转变换-804. 不同岛屿的数量II
  • 原文地址:https://www.cnblogs.com/fighting2014/p/4489540.html
Copyright © 2020-2023  润新知