真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SQL之用戶(hù)自定義函數(shù)

關(guān)于SQL Server用戶(hù)自定義的函數(shù),有標(biāo)量函數(shù)、表值函數(shù)(內(nèi)聯(lián)表值函數(shù)、多語(yǔ)句表值函數(shù))兩種。

目前創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、曲阜網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

題外話,可能有部分朋友不知道SQL Serve用戶(hù)自定義的函數(shù)應(yīng)該是寫(xiě)在哪里,這里簡(jiǎn)單提示一下,在Microsoft SQL Server Managerment Studio里面,展開(kāi)具體需要?jiǎng)?chuàng)建SQL Server用戶(hù)自定義函數(shù)的數(shù)據(jù)庫(kù)(即每個(gè)用戶(hù)自定義函數(shù)只針對(duì)具體的一個(gè)數(shù)據(jù)庫(kù)有用),然后找到可編程性選項(xiàng),再展開(kāi)找到函數(shù)選項(xiàng),在具體的函數(shù)選項(xiàng)里面可參照下圖的方式鼠標(biāo)右鍵選擇來(lái)添加。

SQL之用戶(hù)自定義函數(shù)

 

標(biāo)量函數(shù)

 

所謂標(biāo)量函數(shù)簡(jiǎn)單點(diǎn)來(lái)講就是返回的結(jié)果只是一個(gè)標(biāo)量,對(duì)于我來(lái)講,返回的結(jié)果就是一種類(lèi)型的一個(gè)值。

寫(xiě)法如下:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
CREATE FUNCTION  
(
    -- Add the parameters for the function here
    <@Param1, sysname, @p1> 
)
RETURNS 
AS
BEGIN
    -- Declare the return variable here
    DECLARE <@ResultVar, sysname, @Result> 

    -- Add the T-SQL statements to compute the return value here
    SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>

    -- Return the result of the function
    RETURN <@ResultVar, sysname, @Result>

END

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

例子:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
CREATE FUNCTION GetSum
(
    @firstNum int,
    @secondNum int
)
RETURNS int
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result int

    -- Add the T-SQL statements to compute the return value here
    SELECT @result=@firstNum+@secondNum

    -- Return the result of the function
    RETURN @result

END
GO

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

 題外話:我們來(lái)看看上面的寫(xiě)法,對(duì)于SQL Server來(lái)講,我們聲明一個(gè)變量的方式是用@變量名,而且相對(duì)于編程來(lái)講,SQL Server聲明的方式跟我們開(kāi)了個(gè)玩笑,是先變量后面才是類(lèi)型。對(duì)于需要傳參跟不需要傳參的方式,其實(shí)跟我們編程的方式一樣。有參數(shù)則是如下方式:

CREATE FUNCTION GetSum
(
    @firstNum int,
    @secondNum int
)

如果沒(méi)有參數(shù),則只要保留括號(hào)即可。跟我們理解的函數(shù)寫(xiě)法一致。

CREATE FUNCTION GetSum
(
)

對(duì)于返回方式,這跟我們編程的方式又不大一樣。SQL Server函數(shù)的返回類(lèi)型并不放在函數(shù)名前面,而是函數(shù)名括號(hào)的后面。而且函數(shù)的返回類(lèi)型需要用到返回關(guān)鍵字RETURNS,而不是RETURN。

對(duì)于函數(shù)來(lái)講,當(dāng)然也會(huì)有所謂的函數(shù)體。標(biāo)量函數(shù)也一樣。它的函數(shù)體是包含在:

AS
BEGIN
    -- 函數(shù)體
END

對(duì)于需要在函數(shù)體里面聲明變量的話,則需要使用到DECLARE關(guān)鍵字進(jìn)行聲明。函數(shù)體內(nèi)的返回才是關(guān)鍵字RETURN。 

好了,標(biāo)量函數(shù)的例子也舉完了,要存到數(shù)據(jù)庫(kù)里面,還需要點(diǎn)擊Microsoft SQL Server Management Studio工具里的執(zhí)行操作。這樣之后,就可以在查詢(xún)窗口里面跟查詢(xún)表數(shù)據(jù)一樣來(lái)查詢(xún)結(jié)果了。

使用方式好懂吧,但是需要注意的是[dbo]這個(gè)對(duì)象名在不能省,[GetSum]函數(shù)后面可也別少了()。說(shuō)來(lái)也奇怪,對(duì)于表值函數(shù)來(lái)說(shuō),對(duì)象名[dbo]倒是不寫(xiě)也可以正確執(zhí)行。

select [dbo].[GetSum]()

 

內(nèi)聯(lián)表值函數(shù)

 

 相對(duì)于標(biāo)量函數(shù)只返回一個(gè)標(biāo)量值,內(nèi)聯(lián)表值函數(shù)返回的是表數(shù)據(jù)。當(dāng)然羅,表數(shù)據(jù)就是Table類(lèi)型。

寫(xiě)法如下:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
CREATE FUNCTION  
(    
    -- Add the parameters for the function here
    <@param1, sysname, @p1> , 
    <@param2, sysname, @p2> 
)
RETURNS TABLE 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references here
    SELECT 0
)
GO

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

例子:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
CREATE FUNCTION [GetMoreThanSalary]
(    
    @salary int
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT [FName],[FCity],[FAge],[FSalary] FROM [Demo].[dbo].[T_Person] Where [FSalary] > @salary
)
GO

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

題外話:標(biāo)量函數(shù)上面提過(guò)的內(nèi)容,這里就不重復(fù)了。內(nèi)聯(lián)表函數(shù)返回的表結(jié)構(gòu)由函數(shù)體內(nèi)的SELECT語(yǔ)句來(lái)決定。

對(duì)于標(biāo)量函數(shù)來(lái)講,函數(shù)體是包含在如下結(jié)構(gòu)中。

AS
BEGIN
    -- 函數(shù)體
END

但是對(duì)于內(nèi)聯(lián)表值函數(shù)來(lái)講,函數(shù)體的結(jié)構(gòu)則是如下的方式。內(nèi)聯(lián)表值函數(shù)只執(zhí)行一條SQL語(yǔ)句后返回Table結(jié)果。

AS
RETURN
    -- 函數(shù)體
END

執(zhí)行表值函數(shù)的方式如下:

select [FName],[FCity],[FAge],[FSalary] from [dbo].[GetMoreThanSalary](8000)

可以看得出,這種執(zhí)行方式就跟普通表的執(zhí)行方式一樣了。表值函數(shù)其實(shí)相當(dāng)于存儲(chǔ)在內(nèi)存空間里面的一張?zhí)摂M表。

 

多語(yǔ)句表值函數(shù)

 

 多語(yǔ)句表值函數(shù)跟內(nèi)聯(lián)表值函數(shù)都是表值函數(shù),它們返回的結(jié)果都是Table類(lèi)型。多語(yǔ)句表值函數(shù)顧名思義,就是可以通過(guò)多條語(yǔ)句來(lái)創(chuàng)建Table類(lèi)型的數(shù)據(jù)。這里不同于內(nèi)聯(lián)表值函數(shù),內(nèi)聯(lián)表值函數(shù)的返回結(jié)果是由函數(shù)體內(nèi)的SELECT語(yǔ)句來(lái)決定。而多語(yǔ)句表值函數(shù),則是需要指定具體的Table類(lèi)型的結(jié)構(gòu)。也就是說(shuō)返回的Table,已經(jīng)定義好要哪些字段返回。所以它能夠支持多條語(yǔ)句的執(zhí)行來(lái)創(chuàng)建Table數(shù)據(jù)。

寫(xiě)法如下:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
CREATE FUNCTION  
(
    -- Add the parameters for the function here
    <@param1, sysname, @p1> , 
    <@param2, sysname, @p2> 
)
RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
     , 
     
)
AS
BEGIN
    -- Fill the table variable with the rows for your result set
    
    RETURN 
END
GO

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

例子:

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

-- =============================================
-- Author:        
-- Create date: 
-- Description:    
-- =============================================
ALTER FUNCTION DemoFun
(

)
RETURNS 
@result TABLE 
(
    name nvarchar(20),
    city nvarchar(20),
    age int,
    salary int
)
AS
BEGIN
    -- Fill the table variable with the rows for your result set
    insert into @result(name, city, age, salary)
    select FName,FCity,FAge,FSalary from dbo.T_Person where FSalary>8000
    insert into @result(name, city, age, salary) values
    ('測(cè)試','China', 1, 0)
    RETURN 
END
GO

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

題外話:可以看得出,多語(yǔ)句表值函數(shù)的返回結(jié)果是定義好表結(jié)構(gòu)的虛擬表。這又跟標(biāo)量函數(shù)一樣了吧,只不過(guò)標(biāo)量函數(shù)是返回一種類(lèi)型的標(biāo)量值而已。而且在多語(yǔ)句表值函數(shù)里面,你也會(huì)發(fā)現(xiàn)最后一句是RETURN。告訴執(zhí)行程序,多語(yǔ)句表值函數(shù)已經(jīng)執(zhí)行完成。函數(shù)體結(jié)構(gòu)跟標(biāo)量函數(shù)的結(jié)構(gòu)一樣。對(duì)于類(lèi)型放在變量后面這種方式確實(shí)需要好好轉(zhuǎn)換一下觀念。

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
     , 
     
)

SQL之用戶(hù)自定義函數(shù)

SQL之用戶(hù)自定義函數(shù)

內(nèi)容倒是不多,但是要熟練使用的話,還是需要在項(xiàng)目中多加使用才行。網(wǎng)上有一些網(wǎng)友總結(jié)出來(lái)的常用自定義函數(shù)大家可以收集積累,就像做項(xiàng)目一樣,好的方法要形成所謂的開(kāi)發(fā)庫(kù),幫助我們?cè)谙乱粋€(gè)項(xiàng)目中復(fù)用。節(jié)省我們的開(kāi)發(fā)時(shí)間,提高我們的工作效率。

至此,本文完。

 


新聞標(biāo)題:SQL之用戶(hù)自定義函數(shù)
本文鏈接:http://weahome.cn/article/poiice.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部