2011/01/14

如何解決User Define Function的參數是另一個資料表的欄位值?

在早期的做法,我們的直覺就是直接跑一個cursor,分別取得每一筆資料該欄位的值後送進user defined function,取得相對應的資料後,塞入一個暫存的資料表。等cursor 跑完後,最後再一次select 暫存資料表取得資料。

現在,其實不用。SQL Server 提供一個指令非常好用 – APPLY。舉例而言,我們資料庫中有一支UDF,依輸入的user id 取得該user 隸屬的群組,如下圖所示:
image

好了,接下來假設我們有一個需求是要取得所有使用者的群組資料。該怎麼處理呢?我們可以利用 APPLY 指令,非常簡單的達到這項功能
image

指令如下:

SELECT * FROM dbo.AA_User
    CROSS APPLY dbo.f_GetLoginGroup(UserID)


在dbo.f_GetLoginGroup 的參數,請指定APPLY 之前的資料表某個欄位即可

0 意見: