成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SQL之用戶自定義函數(shù)-創(chuàng)新互聯(lián)

關于SQL Server用戶自定義的函數(shù),有標量函數(shù)、表值函數(shù)(內聯(lián)表值函數(shù)、多語句表值函數(shù))兩種。

目前成都創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設計、港口網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

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

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

標量函數(shù)

所謂標量函數(shù)簡單點來講就是返回的結果只是一個標量,對于我來講,返回的結果就是一種類型的一個值。

寫法如下:

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

    -- 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

例子:

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date, ,>
-- Description:    <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 Server來講,我們聲明一個變量的方式是用@變量名,而且相對于編程來講,SQL Server聲明的方式跟我們開了個玩笑,是先變量后面才是類型。對于需要傳參跟不需要傳參的方式,其實跟我們編程的方式一樣。有參數(shù)則是如下方式:

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

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

CREATE FUNCTION GetSum
(
)

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

對于函數(shù)來講,當然也會有所謂的函數(shù)體。標量函數(shù)也一樣。它的函數(shù)體是包含在:

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

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

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

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

select [dbo].[GetSum]()

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

 相對于標量函數(shù)只返回一個標量值,內聯(lián)表值函數(shù)返回的是表數(shù)據(jù)。當然羅,表數(shù)據(jù)就是Table類型。

寫法如下:

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

例子:

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

題外話:標量函數(shù)上面提過的內容,這里就不重復了。內聯(lián)表函數(shù)返回的表結構由函數(shù)體內的SELECT語句來決定。

對于標量函數(shù)來講,函數(shù)體是包含在如下結構中。

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

但是對于內聯(lián)表值函數(shù)來講,函數(shù)體的結構則是如下的方式。內聯(lián)表值函數(shù)只執(zhí)行一條SQL語句后返回Table結果。

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

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

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

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

多語句表值函數(shù)

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

寫法如下:

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> 
(
    -- Add the parameters for the function here
    <@param1, sysname, @p1> <data_type_for_param1, , int>, 
    <@param2, sysname, @p2> <data_type_for_param2, , char>
)
RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
    <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
    <Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)
AS
BEGIN
    -- Fill the table variable with the rows for your result set
    
    RETURN 
END
GO

例子:

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <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
    ('測試','China', 1, 0)
    RETURN 
END
GO

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

RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
    <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
    <Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)

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

至此,本文完。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享名稱:SQL之用戶自定義函數(shù)-創(chuàng)新互聯(lián)
本文URL:http://jinyejixie.com/article18/csdsdp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、靜態(tài)網(wǎng)站定制網(wǎng)站、App設計、移動網(wǎng)站建設網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
常宁市| 甘肃省| 蒙城县| 东兰县| 翁源县| 隆林| 沈阳市| 梧州市| 汝城县| 屯昌县| 奉节县| 景洪市| 墨江| 马尔康县| 沙雅县| 鄂温| 麻阳| 鄂州市| 高碑店市| 区。| 莆田市| 冀州市| 广州市| 凉城县| 安陆市| 渝北区| 福海县| 云和县| 恩施市| 中方县| 开阳县| 博野县| 张家港市| 田东县| 南丹县| 班戈县| 安阳县| 华蓥市| 忻城县| 长葛市| 渑池县|