[英]SQL Server: How to call a user-defined function (UDF) on linked server?
[英]SQL Server: How to call a UDF, if available?
大多數系統將具有可用的用戶定義功能(UDF)。 有些不會。 如果要使用UDF,我想使用它:
SELECT
Users.*,
dbo.UserGroupMembershipNames(Users.UserID) AS MemberOfGroupNames
FROM Users
否則退回到可接受的替代方案
SELECT
Users.*,
(SELECT TOP 1 thing FROM Something
WHERE Something.ID = Users.UserID) AS MemberGroupNames
FROM Users
怎么辦
我的第一次嘗試使用明顯的解決方案當然失敗了:
SELECT
Users.*,
CASE
WHEN (OBJECT_ID('dbo.UserGroupMembershipNames') IS NOT NULL) THEN
dbo.UserGroupMembershipNames(Users.UserID)
ELSE (SELECT TOP 1 thing FROM Something
WHERE Something.ID = Users.UserID)
END AS MemberOfGroupNames
FROM Users
由於我以外的原因
您可能必須先檢查該函數的存在,然后再選擇是否調用它:
IF OBJECT_ID('dbo.UserGroupMembershipNames') IS NOT NULL
SELECT
Users.*,
dbo.UserGroupMembershipNames(Users.UserID) AS MemberOfGroupNames
FROM Users
ELSE
SELECT
Users.*,
(SELECT TOP 1 thing FROM Something
WHERE Something.ID = Users.UserID) AS MemberGroupNames
FROM Users
我認為不可能將其捆綁在單個條件SELECT語句中。
這是因為引擎在執行計划的解析或准備期間嘗試綁定到UDF。
您將不得不使用條件語句將其拆分為兩個語句(很遺憾,這在視圖或內聯表值函數中不起作用):
IF (OBJECT_ID('dbo.UserGroupMembershipNames') IS NOT NULL)
SELECT
Users.*,
dbo.UserGroupMembershipNames(Users.UserID)
AS MemberOfGroupNames
FROM Users
ELSE
SELECT
Users.*,
(SELECT TOP 1 thing FROM Something
WHERE Something.ID = Users.UserID)
AS MemberOfGroupNames
FROM Users
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.