sqlServer遊標的使用

來源:互聯網
上載者:User

標籤:

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 [email protected]
  --申明遊標 為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(@[email protected])--動態拼接投入數
             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 [email protected])>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 @[email protected]賦值給臨時儲存變數
       fetch next from MTF_Cursor into @Status,@Type --將遊標向下移1行
   end
close MTF_Cursor--關閉遊標  
deallocate MTF_Cursor--釋放遊標  


 if((select count(*) from [dbo].[MtfSetting]where [email protected])>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



 

sqlServer遊標的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.