if COL_LENGTH('book1','n日均線')isnot null/*判斷表中是否存在列名爲n日
均線的列,存在就刪除,不存在就創建,book表示數據表名*/
begin
alter table book1 /*修改表*/
drop column n日均線/*刪除列*/
end
alter table book1 /*修改表*/
add n日均線decimal(18,2)null /*增加列*/
GO
/*********************************************創建存儲過程*****************************************************/
CREATE PROCEDUREnri/*存儲過程名稱爲nri*/
@n int,@resfloatoutput/*輸入參數n表示n日均線,res爲n日均線的值*/
as
declare @low int /*定義循環變量low*/
declare @high int /*定義循環變量@high*/
declare @max int /*定義變量max表示book1表中數據的總量*/
declare @nsum float /*定義變量nsum表示某天n日收盤的總和*/
set @high=@n /*high初始爲n*/
select @max=count(*)from book1 /*查詢book數據表中數據的總行量*/
/*******************************創建遊標************************************************/
declare test cursor SCROLL FOR /*定義遊標名爲test*/
select 時間,收盤from book1 /*取得要查詢的結果集,遊標指向此結果集*/
open test /*打開遊標*/
declare @收盤float /*定義局部變量收盤,數據類型要跟表中的列保持一致,接收book1表中“收盤”列的數據*/
declare @時間nvarchar(255) /*定義局部變量時間,數據類型要跟表中的列保持一致,接收book1表中“時間”列的數據*/
/****************************外循環開始*************************************************/
while @high<=@max/*所求某日的均線值該日是否不大於表中數據的總行量*/
begin
set @nsum=0/*某天n日收盤的總和初始值爲*/
set @low=@high-@n+1/*所求某天n日均線這n天中的第一日始終比最後一日少(n-1)日*/
/******************************內循環開始*****************************************************/
while @low<=@high/*low是否不大於high,low每次循環+1表示下一日,直到等於所求n日中最後一日*/
begin
fetch ABSOLUTE @lowfromtest into @時間,@收盤/*遊標根據low值定位對應第幾行(第幾日)數據,
並把數據賦值給局部變量@時間,@收盤*/
set @nsum=@nsum+@收盤/*n日的收盤值相加*/
set @res=@nsum/@n /*求得某日的n日均線*/
set @low=@low+1 /*low+1表示下一日*/
end
update book1 set n日均線=@res where 時間=@時間/*更新日均線的值,把求得的日均線的值更新到對應日期*/
set @high=@high+1 /*求下一日的n日均線*/
end
CLOSE test /*關閉遊標*/
DEALLOCATE test /*釋放遊標資源*/
/*新建查詢*/
DECLARE @rijun float /*聲明變量@rijun接收存儲過程的輸出參數*/
EXEC nri @n=6,@res=@rijunOUTPUT /*執行存儲過程nri,輸入參數n爲(6日均線)*/
/*輸出參數res傳遞給變量@rijun*/
/*新建查詢刪除存儲過程*/
drop proc nri