成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2000 UDF深度發掘如何進行?

數據庫 SQL Server
我們今天是要和大家一起討論的是對SQL Server 2000 UDF進行深度發掘的實際操作,以下就是文章的主要內容的詳細介紹。

我們今天主要向大家講述的是對SQL Server 2000 UDF進行深度發掘的實際操作,即Microsoft SQL Server 2000數據庫的新增特性—用戶的User-Defined Function(UDF)自定義函數,并演示幾個常用的實例。

 

UDF的功能類似SQL Server中內建的系統函數,如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等

 

本文將介紹Microsoft SQL Server 2000的新增特性—用戶自定義函數User-Defined Function(UDF),并演示幾個常用的實例。

 

UDF的功能類似SQL Server中內建的系統函數,如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等等。一個UDF可以沒有參數,或者帶有一個或多個參數,函數運行后將會返回一個函數值。定義UDF的語法如下:

 

  1. CREATE FUNCTION [ owner_name.] function_name   
  2. ( { { @parameter_name scalar_parameter_data_type   
  3. [,…n] ] )   
  4. RETURN scalar_return_data_type   
  5. [WITH < function_option> [, … n]]   
  6. [AS]   
  7. BEGIN   
  8. Function_body   
  9. RETURN scalar_expression   
  10. END   

每個UDF可以帶有0個到1024個參數,每個參數可以是除了timestamp、cursor、table 以外所有的數據類型;函數返回值的限制要更多一些,它不可以是text、ntext、image、timestamp、cursor和table。

函數體是UDF的主要部分,它有兩個選項: ENCRYOTION和 SCHEMABINDING。

SCHEMABINDING是SQL Server 2000的新增功能,可以和視圖一同使用。該選項不允許刪除和修改被該函數引用的對象。這樣可以防止無效的函數和視圖對它們引用的對象進行結構上的修改。

大家會注意到函數體以Begin開始,End結束。這一點不同于創建存儲過程、觸發器和視圖。當您忘了寫上Begin/End時,系統會返回一個提示信息“Incorrect syntax near ‘RETURN’”。為什么不直接說少了Begin/End,這有點讓人費解。

下面我用幾個例子來說明UDF的應用。

  1. Greatest and Least  

為了區別于系統函數Max和Min,我給新函數命名為Greatest和Least,它們會從以參數形式輸入的兩個值中找出***值和最小值。

Case語句是兩個函數的核心:

CASE WHEN value1 > value2 THEN value1 ELSE value2 END

雖然函數很簡單,但用途是很廣的。

  1. CREATE FUNCTION dbo.Greatest   
  2. -- Return the maximum of two parameters   
  3. (@Val1 SQL_VARIANT,   
  4. @Val2 SQL_VARIANT)   
  5. RETURNS SQL_VARIANT   
  6. AS   
  7. BEGIN   
  8. RETURN (CASE WHEN @val1 > @val2 THEN @val1 ELSE @val2 END)   
  9. END   
  10. go   
  11.  
  12. CREATE FUNCTION dbo.Least   
  13. -- Return the minimum of two parameters   
  14. ( @val1 SQL_VARIANT,   
  15. @val2 SQL_VARIANT )   
  16. RETURNS SQL_VARIANT   
  17. AS   
  18. BEGIN   
  19. RETURN (CASE WHEN @val1 < @val2 THEN @val1 ELSE @val2 END)   
  20. END   
  21. Go   

大小寫轉換函數

該函數有兩個參數:@String和@Capitalize_What。

依據 @Capitalize_What的值,函數有不同的功能:

¨ @Capitalize_What = ‘string’“

函數將 @string的***個非空字符轉換成大寫, 其余部分改為小寫。

¨ @Capitalize_What = ‘sentence’

函數將 @string中的每一句的***非空字符轉換為大寫,句子其余部分轉換為小寫。斷句的依據是’.’、’!’、’?’

¨ @Capitalize_What = ‘word’

函數將 @string中的每個詞都轉換成首字符大寫,其余小寫的形式。

  1. CREATE FUNCTION dbo.Capitalize (  
  2. -- Capitalize the first character of every word,  
  3. -- sentence, or the whole string. Put the rest to lowercase.  
  4. @String VARCHAR (8000),  
  5. @Capitalize_What VARCHAR (8) = ’string’  
  6. -- String: Capitalize the first letter of the string  
  7. -- Sentence: Capitalize the first letter of every sentence.  
  8. -- Delimiters: ./!/?  
  9. -- Word: Capitalize the first letter of every word.  
  10. -- Delimiters: any characters other than letters and digits.  
  11. )  
  12. RETURNS VARCHAR(8000)  
  13. AS  
  14. BEGIN  
  15. DECLARE @Position SMALLINT,  
  16. @Char CHAR(1),  
  17. @First_Char CHAR (1),  
  18. @Word_Start SMALLINT  
  19. SET @Capitalize_What = LOWER( @Capitalize_What )  
  20. SET @Word_Start = 0 
  21. IF @Capitalize_What IN (‘word’, ‘sentence’)  
  22. BEGIN  
  23. SET @Position = DATALENGTH( @String )  
  24. WHILE @Position >= 0 BEGIN  
  25. SET @Char = CASE @Position  
  26. WHEN 0 THEN ’.’  
  27. ELSE UPPER( SUBSTRING(  
  28. @String, @Position,  
  29. 1 ) )  
  30. END  
  31. IF @Char BETWEEN ’A’ AND ’Z’  
  32. OR @Char BETWEEN ’0’ and ’9’ BEGIN  
  33. SET @Word_Start = @Position  
  34. SET @First_Char = UPPER( @Char )  
  35. END  
  36. ELSE BEGIN  
  37. IF @Capitalize_What = ’word’  
  38. OR @Char in ( ’.’, ’!’, ’?’ ) BEGIN  
  39. IF @Word_Start > 0  
  40. AND @First_Char BETWEEN ’A’  
  41. AND ’Z’  
  42. SET @String = STUFF(  
  43. @String, @Word_Start,  
  44. 1, @First_Char )  
  45. SET @Word_Start = 0 
  46. END  
  47. END  
  48. SET @Position = @Position - 1  
  49. END  
  50. END  
  51. ELSE BEGIN -- Capitalize the first character  
  52. SET @Position = 0 
  53. WHILE @Position < DATALENGTH( @String )  
  54. BEGIN  
  55. SET @Position = @Position + 1  
  56. SET @Char = UPPER( SUBSTRING( @String,  
  57. @Position, 1 ) )  
  58. IF @Char BETWEEN ’A’ AND ’Z’  
  59. OR @Char BETWEEN ’0’ AND ’9’ BEGIN  
  60. SET @String = STUFF( @String,  
  61. @Position, 1, @Char )  
  62. SET @Position = 9999 
  63. END  
  64. END  
  65. END  
  66. RETURN( @String )  
  67. END  
  68. go   

小結

SQL Server 2000 的 UDF的應用是很廣泛的,它會給編程人員帶來極大的便利。您可以建立自己的’system’ UDF,存在Master數據庫中,可以為任何數據庫進行調用。

UDF也有不足,我們知道系統函數可以任意調有,不管您使用大寫、小寫或者大小寫混合。UDF卻不行,它是大小寫敏感的。

在未來的版本中,我希望微軟為UDF增加默認值的功能,以后我們可以這樣定義一個函數。

  1. CREAT FUNCTION dbo.Test_default  
  2. ( @parm int = 0 )  
  3. RETURN INT  
  4. AS  
  5. BEGIN  
  6. RETURN ( @parm )  
  7. END  

UDF中諸如此類的小問題還有不少,希望UDF的功能越來越強大,我們編程人員工作起來就會越來越輕松。

 

【編輯推薦】

  1. SQL Server數據庫在安裝時的注意事項
  2. SQL Server 2005 Express混合模式登錄的設置
  3. SQL Server 2005數據庫安裝實例演示
  4. SQL Server 2000全文檢索的使用方案描述
  5. SQL Server數據庫與identity列
責任編輯:佚名 來源: 顏開的博客
相關推薦

2010-07-09 13:01:50

SQL Server

2010-07-19 11:10:58

SQL Server

2010-07-22 16:13:53

2015-10-15 09:53:46

SQL恢復

2011-08-02 15:39:30

SQL Server iSql

2010-07-14 17:37:33

SQL Server

2010-06-02 13:44:51

WIN2000 IPv

2010-04-20 15:41:38

Oracle sql

2010-09-24 18:47:23

SQL數據分頁

2009-07-17 17:41:25

JDBC連接SQL S

2010-09-17 13:35:30

SQL跨表更新

2013-02-21 10:32:29

Win Server 災難恢復虛擬機

2013-12-02 15:36:31

Windows Ser系統映像還原Windows Ser

2010-09-28 14:52:37

SQL表結構

2010-07-09 11:22:18

SQL Server

2010-06-18 10:34:38

SQL Server

2011-04-18 13:02:08

SQL Server SQL Server

2010-11-10 15:23:55

SQL SERVER

2011-08-22 11:12:45

SQL Server 更改賬戶默認數據庫

2010-07-26 10:30:13

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品免费看国产四区 | 午夜影院在线观看版 | 亚洲精品视频在线播放 | 中文字幕91av| 手机在线不卡av | 一级免费视频 | 亚洲精品一区二区三区蜜桃久 | 深爱激情综合 | 亚洲综合在线网 | 黄一区二区三区 | 91免费观看国产 | 亚洲国产精久久久久久久 | 精品国产乱码一区二区三区a | 亚洲视频免费在线观看 | 欧美日韩国产在线观看 | 中文字幕国产 | 91成人午夜性a一级毛片 | h视频免费在线观看 | 狠狠干天天干 | 中文字幕 国产精品 | 91天堂网| 国产一区不卡在线观看 | 久久久久久久国产 | 高清av一区 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品入口麻豆www | 欧美精选一区二区 | 国产精品日产欧美久久久久 | 欧美专区日韩专区 | 中文字幕日韩在线 | 日本免费网 | 天天干天天操天天看 | 国产午夜精品一区二区 | 国产精品一区二区三区久久 | 欧美男人天堂 | 日韩欧美在线观看视频 | 国产欧美综合在线 | 日一日操一操 | 国产一区二区自拍 | 91免费在线播放 | 一区在线视频 |