例子:如下圖是參考資料(Reference)以及實體檔案(RFile)的關聯表,一筆參考資料,將有多個實體檔,現在我要將這兩張表串成一張view,而且rid不能重複,FileName用分號作區隔串成一個欄位。
方法:將FileName用分號作區隔串接成一個字串,需要利用ms sql的純量值函數,來定義串接的function,如下圖。
傳統作法是用sql的while和point去將FileName一個一個取出來。不過今天發現一個更快的作法,直接執行下面這段sql,即可產生純量值函數。COALESCE和STUFF為sql原生函數,google很容易查到,不在此描述。
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[GetRFileName] --函數名稱 ( --輸入參數 @Rid int ) RETURNS nvarchar(3000) AS BEGIN --宣告變數 DECLARE @HandleRid nvarchar(3000) --串接FileName SELECT @HandleRid = COALESCE(@HandleRid,'') + ';' + [FileName] from RFile where RId =@Rid RETURN STUFF(@HandleRid, 1, 1, '') END
建立完成後,我們就可以下此sql
SELECT RId,Title,Content,PublishDate,dbo.GetRFileName(RId) FROM Reference