悟心

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

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

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

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

          一、下面先說明下,如何創(chuàng)建函數(shù)

          1、創(chuàng)建沒有返回值與沒有參數(shù)的函數(shù)

          CREATE FUNCTION my_function()

          AS

          BEGIN

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

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

              (do something)

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

          END

          2、創(chuàng)建沒有返回值有參數(shù)的函數(shù)

          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()函數(shù)是將int型轉為varchar型

          END

          3、創(chuàng)建有返回值與有參數(shù)的函數(shù)

          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

          二、刪除一個函數(shù)語法

          DROP FUNCTION my_function

          三、執(zhí)行一個函數(shù)語法

          select dbo.my_function(--根據(jù)有沒參數(shù)來處理

          go

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

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

          --select dbo.my_function()

          --go

          四、下面提供二個例子

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

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

          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表中,進行分行換行顯示,其中使用游標進行循環(huán)處理

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

          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--循環(huán)開始

          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 艾波 閱讀(2948) 評論(1)  編輯  收藏 所屬分類: SQL

          評論

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

          主站蜘蛛池模板: 吉林省| 轮台县| 岳西县| 西乌珠穆沁旗| 深水埗区| 布尔津县| 芜湖市| 保康县| 卓尼县| 扬中市| 苍南县| 将乐县| 丰顺县| 金阳县| 揭西县| 区。| 奇台县| 庄浪县| 焦作市| 安阳县| 图们市| 赤城县| 屏东市| 阳春市| 杨浦区| 马公市| 东安县| 卓资县| 留坝县| 溧阳市| 仁布县| 杭锦旗| 乐山市| 廊坊市| 枞阳县| 耒阳市| 潮州市| 宝鸡市| 铜川市| 宁晋县| 滦南县|