sqlServer游標的使用

2022-01-12 21:58:50 字數 2453 閱讀 9222

use [patpd1]

go/****** object:  userdefinedfunction [dbo].[fun_getconditioninner]    script date: 2015/5/9 9:03:38 ******/

set ansi_nulls on

goset quoted_identifier on

goalter function [dbo].[fun_getconditioninner] (@product varchar(20))

returns  varchar(8000)

asbegin

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,' ','')+','

endset @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)+''''

endset @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,' ','')

endelse

begin

set @returnvalue+='

sum(quantity)  qty_total_'+replace(@temptype,' ','')

end--print @returnvalue

return @returnvalue

end

SQL Server游標的使用

declare cursor name cursor local global forward only scroll static keyset dynamic fast forward read only scroll locks optimistic type warning for sele...

SQL Server游標的使用

由於sql server中沒有提供直接遍歷表的每一行的方法,所以只有通過游標和while迴圈來代替。當讓也可以不適用游標,僅僅使用while迴圈也能遍歷表 當id為int,主鍵時可用這種方式 但兩種方式我沒有做過實際的對比測試,效率誰高誰低我也不好說。我只給乙個游標使用的簡單示例,想深入了解和使用游...

SQL SERVER 游標的使用

定義游標,讓游標指向sql查詢的結果 declare democursor cursor for select name,id from userinfo 開啟游標。open democursor declare name nvarchar 32 declare id int 把游標指向的資料取出來...