sql server中函數的寫法格式規格

/*****************************************************

*** author:Susan

***date:2005/08/05

*** expliation:如何寫函數的格式及例子,有游標的用法!

*** 本版是SQL SERVER 版!

******************************************************/

在sql函數的格式規格:

CREATE FUNCTION XXX(參數1,參數2,……)

※RETURNS 返回值的類型

/*

列舉傳入參數

1:名稱,2:類型,包括長度

Eg:@strUNIT_CODE varCHAR(3)

返回值的類型 à類型,包括長度

Eg: varCHAR(8000)

*/

As

/*

定義內部參數

1:名稱,2:類型,包括長度

Eg:@strUNIT_CODE varCHAR(3)

*/

※ BEGIN

Declare

參數1,

參數2……………

/*

初始化內部參數

Eg:SET @strUNIT_CODE=’’

*/

Set參數1的初始值

Set參數2的初始值…………

/*

過程的主內容區

Trascation:這裡起到的作用是,如果他中間的任何一個執行錯誤,就全部執行都返回,這裡sql sever 7.0以前一定要寫入,以後的就可以省略

Return:結束這支sp

*/

    /*

        1:可以取得需要的值以存在內部參數中

     Eg:SELECT @strUNIT_CODE=UNIT_CODE FROM UNIT WHERE …….

2:可以用取到的或傳入的參數進行判斷,來進行各種選取的操作,但不可以進行update,insert,delete等等的操作!

eg: IF @strUNIT_CODE=’’

         BEGIN

     //具體的操作

End

Else

Begin

    //具體的操作

End

 3:有關游標的問題

     Eg:

        declare db cursor for       //聲明一個游標(db為其名稱)

        SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT(@strTO,2)//記錄集

        open db                 //打開游標

            fetch next from db into @strUNIT_NAME //將第一個值放入一個參數中

        while @@fetch_status = 0 ---存在本筆值向下循環

(0:順利執行;-1:失敗,或資料列超出結果集;-2:擷取的資料列已遺漏)

        BEGIN             ----開始循環

                        //個體操作

        End                ----結束循環

        Close db            ---關閉游標

deallocate db         //移除資料指標參考

*/

※ Return 回傳值

※ End

下面是一個例子

CREATE   FUNCTION TEST_3_Fn(@strTO VARCHAR(4))

/*

作者:Susan

時間:2005/8/2

程式功能:

參數: 機關代碼

輸出:機關名稱

調用方法:SELECT TEST_3_Fn('011')

結果:機關名稱串起來

*/

RETURNS VARCHAR(8000)

as

 

BEGIN

 

DECLARE

 @strUNIT_NAME VARCHAR(800),

 @strSQL VARCHAR(8000),

 @Link VARCHAR(1),

 @Link1 VARCHAR(1)

SET @strUNIT_NAME=''

SET @strSQL=''

SET @Link=''

SET @Link1=''

 

/*

處理update 的部分

在函數中不可以進行insert,update ,delete的動作!

功能說明:本sp用於處理cursor問題

*/

    

        IF   @strTO<>''

                 BEGIN

                declare db cursor for                                                --必需聲明在查詢的前面

                 SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT(@strTO,2)---取到相關信息

                 END

        ELSE

               BEGIN

                declare db cursor for                                                --必需聲明在查詢的前面

                 SELECT UNIT_NAME FROM UNIT WHERE LEFT(UNIT_CODE,2)=LEFT('011',2)---取到相關信息

                 END

        open db                                                    ---開起取到的信息

        fetch next from db into @strUNIT_NAME                               ---把第一筆放入@strUNIT_NAME中

        while @@fetch_status = 0                                           ---表示存在本筆資料

        BEGIN                                                    ----開始循環

                set @strSQL =@strSQL+@Link1+@Link+ @strUNIT_NAME ----設定保存的值

                fetch next from db into @strUNIT_NAME                       ----進行下次循環

                SET @Link=CHAR(13) +CHAR(10)

                SET @Link1=','

        END                                                        ----結束循環

        close db                                                   ---關閉信息

        deallocate db   

 

        RETURN @strSQL

END

转载于:https://www.cnblogs.com/xiongeee/archive/2006/08/24/484945.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值