自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server 2000 UDF深度發(fā)掘如何進(jìn)行?

數(shù)據(jù)庫 SQL Server
我們今天是要和大家一起討論的是對SQL Server 2000 UDF進(jìn)行深度發(fā)掘的實(shí)際操作,以下就是文章的主要內(nèi)容的詳細(xì)介紹。

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

 

UDF的功能類似SQL Server中內(nèi)建的系統(tǒng)函數(shù),如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等

 

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

 

UDF的功能類似SQL Server中內(nèi)建的系統(tǒng)函數(shù),如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等等。一個(gè)UDF可以沒有參數(shù),或者帶有一個(gè)或多個(gè)參數(shù),函數(shù)運(yùn)行后將會(huì)返回一個(gè)函數(shù)值。定義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   

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

函數(shù)體是UDF的主要部分,它有兩個(gè)選項(xiàng): ENCRYOTION和 SCHEMABINDING。

SCHEMABINDING是SQL Server 2000的新增功能,可以和視圖一同使用。該選項(xiàng)不允許刪除和修改被該函數(shù)引用的對象。這樣可以防止無效的函數(shù)和視圖對它們引用的對象進(jìn)行結(jié)構(gòu)上的修改。

大家會(huì)注意到函數(shù)體以Begin開始,End結(jié)束。這一點(diǎn)不同于創(chuàng)建存儲過程、觸發(fā)器和視圖。當(dāng)您忘了寫上Begin/End時(shí),系統(tǒng)會(huì)返回一個(gè)提示信息“Incorrect syntax near ‘RETURN’”。為什么不直接說少了Begin/End,這有點(diǎn)讓人費(fèi)解。

下面我用幾個(gè)例子來說明UDF的應(yīng)用。

  1. Greatest and Least  

為了區(qū)別于系統(tǒng)函數(shù)Max和Min,我給新函數(shù)命名為Greatest和Least,它們會(huì)從以參數(shù)形式輸入的兩個(gè)值中找出***值和最小值。

Case語句是兩個(gè)函數(shù)的核心:

CASE WHEN value1 > value2 THEN value1 ELSE value2 END

雖然函數(shù)很簡單,但用途是很廣的。

  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   

大小寫轉(zhuǎn)換函數(shù)

該函數(shù)有兩個(gè)參數(shù):@String和@Capitalize_What。

依據(jù) @Capitalize_What的值,函數(shù)有不同的功能:

¨ @Capitalize_What = ‘string’“

函數(shù)將 @string的***個(gè)非空字符轉(zhuǎn)換成大寫, 其余部分改為小寫。

¨ @Capitalize_What = ‘sentence’

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

¨ @Capitalize_What = ‘word’

函數(shù)將 @string中的每個(gè)詞都轉(zhuǎn)換成首字符大寫,其余小寫的形式。

  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   

小結(jié)

SQL Server 2000 的 UDF的應(yīng)用是很廣泛的,它會(huì)給編程人員帶來極大的便利。您可以建立自己的’system’ UDF,存在Master數(shù)據(jù)庫中,可以為任何數(shù)據(jù)庫進(jìn)行調(diào)用。

UDF也有不足,我們知道系統(tǒng)函數(shù)可以任意調(diào)有,不管您使用大寫、小寫或者大小寫混合。UDF卻不行,它是大小寫敏感的。

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

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

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

 

【編輯推薦】

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

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恢復(fù)

2011-08-02 15:39:30

SQL Server iSql

2010-04-20 15:41:38

Oracle sql

2010-07-14 17:37:33

SQL Server

2010-06-02 13:44:51

WIN2000 IPv

2010-09-24 18:47:23

SQL數(shù)據(jù)分頁

2009-07-17 17:41:25

JDBC連接SQL S

2013-02-21 10:32:29

Win Server 災(zāi)難恢復(fù)虛擬機(jī)

2013-12-02 15:36:31

Windows Ser系統(tǒng)映像還原Windows Ser

2010-09-17 13:35:30

SQL跨表更新

2010-09-28 14:52:37

SQL表結(jié)構(gòu)

2010-07-09 11:22:18

SQL Server

2010-06-18 10:34:38

SQL Server

2010-11-10 15:23:55

SQL SERVER

2011-04-18 13:02:08

SQL Server SQL Server

2011-08-01 10:23:21

2010-07-26 10:30:13

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號