FUNCTION(資料表值函式)使用 IF.....ELSE 範例
原本就做好的一張報表,是利用FUNCTION(資料表值函式)產生資料集。然後在REPORT中顯示結果。
再利用T-SQL語法將結果進行塞選,呈現在報表上,但是最近這張報表的執行時間越來越久了。
查看了一下資料組成的語法,發現沒有做條件篩選,直接一整包丟出來,初期還可以,隨者時間累積,資料筆數增加,自然查詢效率就不佳。
決定先加入條件式,先將資料集縮小範圍與內容,避免查詢過久。
但是因為報表的查詢條件有許多種不同方式(日期、品名、專案號碼...等等),所以想在FUNCTION中加入判斷條件,按照判斷條件查詢執行取得資料結果。
簡單建立一個範例,紀錄一下。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS ( SELECT * FROM sys.objects
WHERE type = 'TF' AND name = 'UTF_TTT'
)
DROP FUNCTION UTF_TTT
GO
--建立資料表值函式
CREATE FUNCTION [dbo].UTF_TTT(
@CLASS int
)
--設定返還資料內容
RETURNS @TABLE TABLE
(
項目 int,
日期 nvarchar(10)
)
AS
BEGIN
--宣告建立接收資料暫存資料表
DECLARE @TB TABLE (
項目 int,
日期 nvarchar(10)
)
BEGIN
--判斷項目別為1
IF @CLASS = 1
BEGIN
INSERT INTO @TB(項目 ,日期)
SELECT 1 AS 項目 ,CONVERT(nvarchar(10),GETDATE(),112) AS 日期
END
ELSE IF @CLASS = 2
BEGIN
INSERT INTO @TB(項目 ,日期)
SELECT 2 AS 項目 ,CONVERT(nvarchar(10),GETDATE(),112) AS 日期
END
ELSE IF @CLASS = 3
BEGIN
INSERT INTO @TB(項目 ,日期)
SELECT 3 AS 項目 ,CONVERT(nvarchar(10),GETDATE(),112) AS 日期
END
END
--寫入要回傳資料的資料表
INSERT INTO @TABLE(項目 ,日期)
SELECT * FROM @TB
RETURN
END
-------------------分隔線------------------------------------
--查詢測試
SELECT * FROM [dbo].UTF_TTT(2)
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。