首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Function 自訂函數建立實例教學

     編輯:關於SqlServer

SQL 內建了豐富的系統函數,像是彙總函數、日期函數等,極大地提升了開發效率。但當遇到特殊業務需求時,我們也可以自行建立使用者定義函數。本文透過一個實際案例,示範如何建立標量函數來解決「將同一訂單下的產品名稱以逗號串聯」的問題。

案例需求

假設有一張訂單明細表,包含編號、訂單號、產品名稱。我們需要查詢某訂單號對應的所有產品名稱,並用逗號分隔,例如:「筆記型電腦, 滑鼠, 鍵盤」。

建立標量函數

在 SSMS 中右鍵選擇「新增函數」→「標量值函數」。標量函數回傳單一值,適合此處只需回傳字串的情境。

函數程式碼

CREATE FUNCTION [dbo].[OrderDetailGetStrNameByOrderId] 
(
    @OrderId INT
)
RETURNS VARCHAR(500)
AS
BEGIN
    DECLARE @StrPassengername VARCHAR(500)
    SET @StrPassengername = ''

    SELECT @StrPassengername = @StrPassengername + Passengername + ', '
    FROM OrderDetail
    WHERE OrderId = @OrderId

    -- 移除尾端多餘的逗號與空白
    SELECT @StrPassengername = SUBSTRING(@StrPassengername, 0, LEN(@StrPassengername))

    RETURN @StrPassengername
END

函數呼叫範例

建立完成後,即可像內建函數一樣直接在查詢中使用,大幅簡化程式碼:

SELECT DISTINCT A.OrderId,
       (SELECT [dbo].[OrderDetailGetStrNameByOrderId](A.OrderId)) AS StrName
FROM OrderDetail A

透過自訂函數封裝邏輯,不僅提高程式碼重用性,也讓主查詢更加清晰易讀。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved