<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    悟心

    成功不是將來才有的,而是從決定去做的那一刻起,持續累積而成。 上人生的旅途罷。前途很遠,也很暗。然而不要怕。不怕的人的面前才有路。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      93 隨筆 :: 1 文章 :: 103 評論 :: 0 Trackbacks
    由于工作的需要,了解下SQL Server 2005 函數的寫法,現在總結一下:

    對于SQL Server 
    2005 數據庫而言,函數與存儲過程在語法方面是有很大的相同點,

    最大的不同就是函數有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量

    一、下面先說明下,如何創建函數

    1、創建沒有返回值與沒有參數的函數

    CREATE FUNCTION my_function()

    AS

    BEGIN

        
    DECLARE @variable varchar(255--聲明字符型變量

        
    DECLARE @variable int --聲明整形型變量

        (do something)

    SET @variable = '12345' --對變量variable賦值

    END

    2、創建沒有返回值有參數的函數

    CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))

    AS

    BEGIN

        
    DECLARE @variable_1 varchar(255--聲明字符型變量

        (do something)

    SET @variable_1 = @user_Name + convert(varchar(255),@password--將變量@user_Name與@password連接賦給@variable_1,其中convert()函數是將int型轉為varchar型

    END

    3、創建有返回值與有參數的函數

    CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))

    returns varchar(255)--設置返回值,記住是returns 而不是return

    AS

    BEGIN

        
    DECLARE @result varchar(5)

        
    DECLARE @fagle varchar(5)

    SET @result = select users.user_Name from USERS as users where users.user_Name = @user_Name and users.password = @password

    IF @result = ''

        
    BEGIN

           
    SET @fagle = 'NO'

        
    END

    ELSE

        
    BEGIN

           
    SET @falge = 'YES'

        
    END

    return @result --返回結果

    END

    二、刪除一個函數語法

    DROP FUNCTION my_function

    三、執行一個函數語法

    select dbo.my_function(--根據有沒參數來處理

    go

    --注:在SQL Server 2005 中,有內部函數與外部函數,數據庫系統自帶函數,如sum(),count()等等,這些稱為內部函數,而我們自定義的函數稱為外部函數。

    --在執行函數語法中,也有些區別,如執行內部函數:select sum(total) from ,那么執行外部函數則需要在函數名前加dbo. + 自定義函數名,如

    --select dbo.my_function()

    --go

    四、下面提供二個例子

    1、日期判斷,判斷傳進來的日期是否在上個月日到本月日之間

    --請注意convert()函數的用法

    create function isNewContract(@date varchar(32))

    returns varchar(32)

    AS

    begin

        
    declare @begin_time varchar(32)

        
    declare @end_time varchar(32)

        
    declare @temp varchar(4)

        
    declare @result varchar(32)

        
    declare @month varchar(2)

    set @begin_time=convert(varchar,DATEPART(yeargetdate())) + '-'

    set @end_time=convert(varchar,DATEPART(yeargetdate())) + convert(varcharDATEPART(monthgetdate())) + convert(varchar'14')

    set @temp=convert(varchar(2),(month(getDate())-1 ))

    if(@temp < 10 )

    begin

        
    set @begin_time = @begin_time + convert(varchar(1),'0'+ @temp + '-' + convert(varchar'15')

    end

    if(@date >= @begin_time and @date <= @end_time)

    begin

    set @result = ''

    end

    else

    begin

    set @result = @begin_time

    end

    return @result

    end

    2、查詢多條記錄合并成一條記錄返回,并寫入EXECL表中,進行分行換行顯示,其中使用游標進行循環處理

    --在數據庫中,EXECL默認換行符ACSII碼為'10',在合并字符串之前,需要先轉為EXECL識別的換行符,具體使用chat()內部函數處理

    create function getExportReportCollect(@projectId int ,@month varchar(64))

    returns varchar(4096--設置返回值

    AS

    begin

        
    declare @num varchar(2)

        
    declare @end varchar(10)

        
    declare @Result varchar(4096--用于返回查詢結果

        
    declare city_cursor cursor for --聲明游標變量

        
    select reported.id

        
    from dbo.Investment_Budget_Reported as reported

        
    left join dbo.Investment_Budget_Contract as con

        
    on reported.contractId = con.id

        
    where reported.[month] = @month and reported.projectId = @projectId

    set @Result=''

    set @num = '1'

    set @end = '10' --導入EXECL表中,換行符的ACSII碼

    declare @Field int --聲明臨時存放CityID的變量

    open city_cursor --打開游標

    fetch next from city_cursor into @Field --將實際ID賦給變量

    while(@@fetch_status = 0--循環開始

    begin

        
    if((select [content] from dbo.Investment_Budget_Reported where id = @Field )is not null)

        
    BEGIN

         

           
    if(@Result = '')

               
    select @Result = @Result + @num + '' + [content] from dbo.Investment_Budget_Reported where id = @Field

           
    else

               
    select @Result = @Result + @num + '' + [content] from dbo.Investment_Budget_Reported where id = @Field

        
    set @Result = @Result + char(@end--讓換行符轉為EXECL認識的換行符

    set @num = @num + 1

        
    END

           
    fetch next from city_cursor into @Field --下一個reportId

    end

    close city_cursor --關閉游標

    deallocate city_cursor --釋放游標引用

    return @Result

    end


    本文來自CSDN博客,轉載請標明出處:http:
    //blog.csdn.net/zhdd1234/archive/2009/10/27/4734789.aspx
    posted on 2010-12-16 19:38 艾波 閱讀(2946) 評論(1)  編輯  收藏 所屬分類: SQL

    評論

    # re: SQL Server 2005 自定義函數語匯小結 2010-12-30 17:09 路過
    最大的不同就是函數有返回值,直接使用returns ,而存儲過程則使用output來聲明輸出變量..你確定?
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲精品无码久久久| 欧美大尺寸SUV免费| 亚洲日本中文字幕天堂网| 亚洲AV无码一区二区三区牲色| 美女被cao免费看在线看网站| 亚洲精品视频观看| 亚洲毛片免费观看| 亚洲乱人伦精品图片| 在线视频观看免费视频18| 国产成人亚洲精品| 精品久久免费视频| 特黄aa级毛片免费视频播放| 亚洲国产成人精品无码久久久久久综合 | 亚洲视频在线观看地址| 777成影片免费观看| 亚洲国产综合精品| 岛国av无码免费无禁网站| 亚洲AV无码国产精品永久一区| 免费久久精品国产片香蕉| 97国免费在线视频| 亚洲资源在线视频| 日本无吗免费一二区| 成人毛片100免费观看| 自怕偷自怕亚洲精品| 色妞WWW精品免费视频| 色哟哟国产精品免费观看| 亚洲av最新在线网址| 免费无码肉片在线观看| 三级片免费观看久久| 亚洲精品国产成人中文| 国产亚洲福利一区二区免费看| 中文字幕永久免费视频| 亚洲国产精品成人精品小说| 国产成人免费a在线资源| 青柠影视在线观看免费高清| 亚洲AV成人噜噜无码网站| 亚洲性久久久影院| 18成禁人视频免费网站| 美女视频黄.免费网址| 亚洲国产精品久久66| 国产免费观看a大片的网站|