有些情況可能用下表值函數(shù),表值函數(shù)主要用于數(shù)據(jù)計(jì)算出來(lái)返回結(jié)果集,可以帶參數(shù)(和視圖的一個(gè)大的區(qū)別),如果函數(shù)中沒(méi)有過(guò)多的邏輯處理,如變量的定義,判斷等,
表值函數(shù)返回結(jié)果集可以簡(jiǎn)單向下面這么寫(xiě):
復(fù)制代碼 代碼如下:
CREATE FUNCTION Fun_GetReportNews(@type varchar(10))
RETURNS TABLE
AS
RETURN
(
SELECT TPR_ID,TPR_Title,TPR_Date FROM TP_ReportNews WHERE TPR_Type = @type
)
調(diào)用的時(shí)候就 SELECT XX FROM Fun_GetReprotNews('xx')
如果函數(shù)中要定義變量,進(jìn)行判斷計(jì)算處理什么的,寫(xiě)法有點(diǎn)不一樣了,要定義表變量才行,表值函數(shù)里是不允許創(chuàng)建臨時(shí)表的,只能是表變量。
舉個(gè)簡(jiǎn)單的寫(xiě)法樣式,如下:
復(fù)制代碼 代碼如下:
CREATE FUNCTION FUN_GetInfoList(@type varchar(10))
RETURNS @Table TABLE(TPR_ID int,TPR_Title nvarchar(100),TPR_PubDate datetime)
AS
BEGIN
DECLARE @a varchar(10)
SELECT @a = xx FROM XX WHERE xx = @type
INSERT @Table SELECT XX,XX,XX FROM TableName WHERE XX = @a --表變量里定義的列數(shù)和取值列數(shù)要一致
RETURN
END
如果進(jìn)行多表操作,可以在函數(shù)體內(nèi)定義表變量來(lái)存放結(jié)果集再進(jìn)行關(guān)聯(lián)查詢。
標(biāo)量值函數(shù)也貼一個(gè)樣子好了,老掉牙的了,呵呵~~
復(fù)制代碼 代碼如下:
CREATE FUNCTION FUN_DataFormat (@strDate datetime)
RETURNS varchar(20) AS
BEGIN
declare @date varchar(20)
set @date = DATENAME(YY,@strDate)+'年'+Convert(VARCHAR,MONTH(@strDate))+'月'+Convert(VARCHAR,DAY(@strDate))+'日'
return @date
END
訪問(wèn)標(biāo)量值函數(shù)時(shí)一般在函數(shù)名前加dbo,不然會(huì)被認(rèn)為是系統(tǒng)內(nèi)置函數(shù),卻因又不是系統(tǒng)內(nèi)置函數(shù)而會(huì)報(bào)錯(cuò)。
上面的可以這么測(cè)試
select dbo.FUN_DataFormat(getdate())
就忽悠這些了~~~~~~~