SQL SERVER函數(shù)之深入表值函數(shù)的處理分析
更新時間:2013年06月05日 17:40:59 作者:
本篇文章是對表值函數(shù)進行了詳細的分析介紹,需要的朋友參考下
有些情況可能用下表值函數(shù),表值函數(shù)主要用于數(shù)據(jù)計算出來返回結(jié)果集,可以帶參數(shù)(和視圖的一個大的區(qū)別),如果函數(shù)中沒有過多的邏輯處理,如變量的定義,判斷等,
表值函數(shù)返回結(jié)果集可以簡單向下面這么寫:
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)用的時候就 SELECT XX FROM Fun_GetReprotNews('xx')
如果函數(shù)中要定義變量,進行判斷計算處理什么的,寫法有點不一樣了,要定義表變量才行,表值函數(shù)里是不允許創(chuàng)建臨時表的,只能是表變量。
舉個簡單的寫法樣式,如下:
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
如果進行多表操作,可以在函數(shù)體內(nèi)定義表變量來存放結(jié)果集再進行關(guān)聯(lián)查詢。
標量值函數(shù)也貼一個樣子好了,老掉牙的了,呵呵~~
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
訪問標量值函數(shù)時一般在函數(shù)名前加dbo,不然會被認為是系統(tǒng)內(nèi)置函數(shù),卻因又不是系統(tǒng)內(nèi)置函數(shù)而會報錯。
上面的可以這么測試
select dbo.FUN_DataFormat(getdate())
就忽悠這些了~~~~~~~
表值函數(shù)返回結(jié)果集可以簡單向下面這么寫:
復(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)用的時候就 SELECT XX FROM Fun_GetReprotNews('xx')
如果函數(shù)中要定義變量,進行判斷計算處理什么的,寫法有點不一樣了,要定義表變量才行,表值函數(shù)里是不允許創(chuàng)建臨時表的,只能是表變量。
舉個簡單的寫法樣式,如下:
復(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
如果進行多表操作,可以在函數(shù)體內(nèi)定義表變量來存放結(jié)果集再進行關(guān)聯(lián)查詢。
標量值函數(shù)也貼一個樣子好了,老掉牙的了,呵呵~~
復(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
訪問標量值函數(shù)時一般在函數(shù)名前加dbo,不然會被認為是系統(tǒng)內(nèi)置函數(shù),卻因又不是系統(tǒng)內(nèi)置函數(shù)而會報錯。
上面的可以這么測試
select dbo.FUN_DataFormat(getdate())
就忽悠這些了~~~~~~~
相關(guān)文章
將所有符合條件的結(jié)果拼接成一列并用逗號隔開的一個sql語句
把所有符合條件的結(jié)果拼接成一列,用逗號隔開的一個sql語句。2010-06-06Sql Server中Substring函數(shù)的用法實例解析
在sqlserver中substring函數(shù)是用來處理字符串的,常用于字符串截取了,下面我來給大家介紹下Sql Server中Substring函數(shù)的用法實例解析,需要的朋友參考下吧2016-12-12INSERT INTO SELECT語句與SELECT INTO FROM語句的一些區(qū)別
INSERT INTO SELECT語句與SELECT INTO FROM語句的一些區(qū)別介紹,需要的朋友可以參考下面的說明與條件2012-05-05SQL Server ltrim(rtrim()) 去不掉空格的原因分析
這篇文章主要介紹了SQL Server ltrim(rtrim()) 去不掉空格的原因分析,原因主要是因為中間存在回車符或者換行符,所以要先將此符號替換掉,具體示例代碼大家參考下本文2017-08-08sqlserver/mysql按天、按小時、按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù)【推薦】
最近小編接到這樣的需求,公司需要按天,按小時查看數(shù)據(jù),可以直觀的看到時間段的數(shù)據(jù)峰值。這篇文章主要介紹了sqlserver/mysql按天,按小時,按分鐘統(tǒng)計連續(xù)時間段數(shù)據(jù) ,需要的朋友可以參考下2019-06-06SqlServer中用exec處理sql字符串中含有變量的小例子
這篇文章主要介紹了用exec處理sql字符串中含有變量的小例子,有需要的朋友可以參考一下2013-12-12