日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer2000UDF深度發(fā)掘如何進行?

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

成都創(chuàng)新互聯(lián)公司主營府谷網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,府谷h5微信小程序開發(fā)搭建,府谷網(wǎng)站營銷推廣歡迎府谷等地區(qū)企業(yè)咨詢

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

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

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

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

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

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

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

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

 
 
 
  1. Greatest and Least  

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

Case語句是兩個函數(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ù)有兩個參數(shù):@String和@Capitalize_What。

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

¨ @Capitalize_What = ‘string’“

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

¨ @Capitalize_What = ‘sentence’

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

¨ @Capitalize_What = ‘word’

函數(shù)將 @string中的每個詞都轉(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)用是很廣泛的,它會給編程人員帶來極大的便利。您可以建立自己的’system’ UDF,存在Master數(shù)據(jù)庫中,可以為任何數(shù)據(jù)庫進行調(diào)用。

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

在未來的版本中,我希望微軟為UDF增加默認值的功能,以后我們可以這樣定義一個函數(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的功能越來越強大,我們編程人員工作起來就會越來越輕松。


網(wǎng)站標(biāo)題:SQLServer2000UDF深度發(fā)掘如何進行?
網(wǎng)頁地址:http://www.dlmjj.cn/article/cdjgsij.html