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 把游標指向的資料取出來...