在SQL中系統已為我們提供了很非常豐富的函數:例:聚會函數avg, sum,count,max,min 日期函數:Day,Month,Year等等 為我們日常開發節省很多時間 但是有一些特殊需求的話SQL 也提供自己創建函數的功能下面舉一小例子:需求: 某一訂單表 編號,訂單號,產品名稱 要知道 某一訂單號的產品名稱 名稱之間用逗號(,)隔開 如下圖:
我們創建一個標題函數: StrName 創建過程類似創建存儲過程 如下:
點擊右鍵創建 表值函數與標量函數 從名稱就可以分出來 一個返回表(集合) 標題(單一) 在這個小例子中因為我們只返回名字 所以創建一個標量函數 代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Create FUNCTION [dbo].[OrderDetailGetStrNameByOrderId] ( @OrderId int ) RETURNS varchar (500) AS BEGIN -- Declare the return variable here declare @StrPassengername varchar (500) set @StrPassengername= '' select @StrPassengername=@StrPassengername+ Passengername + ', ' from OrderDetail where OrderId=@OrderId select @StrPassengername= substring (@StrPassengername,0,len(@StrPassengername)) -- Return the result of the function RETURN @StrPassengername END |
創建好之后在就可以像avg,sum等函數一樣的使用 減少代碼量 如下
1
2
3
|
select distinct A.OrderId, ( SELECT [dbo].[OrderDetailGetStrNameByOrderId](A.OrderId)) StrName from OrderDetail A |
完畢。