【T-SQL】在FUNCTION(資料表值函式)使用IF.....ELSE做判斷

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)

 

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。