Sql-Server
為什麼我不能直接呼叫我的 UDF?為什麼我需要將其限定為 3 級深度?
我剛剛創建了一個 UDF 並對其進行了測試,發現僅在使用此語法時才有效
SELECT [PMIS].[dbo].[fnIsReportingTo] (50,1132)
我期待它像這樣工作:
select * from fnIsReportingTo (50,1132)
要麼
select fnIsReportingTo (50,1132)
這是我的創建 SQL:
create function fnIsReportingTo ( @BossID int, @EmployeeID int) RETURNs bit AS begin declare @ret bit if exists (select * from dbo.fnGetEmployeeHierarchy(@BossID) where employeeID=@employeeID) select @ret=1 else select @ret=0 return @ret end
標量UDFS 必須使用模式進行限定。當然,除非它在不同的數據庫中,否則您不需要限定名稱的數據庫部分。
SELECT [dbo].[fnIsReportingTo] (50,1132)
在 FROM 子句中,只能使用表值函式
請參閱MSDN中的“函式類型”
編輯:作為觀察,我傾向於避免:
- 嵌套 UDF 這個
- 在標量 UDF 中使用表查找
如果您對另一個表的每一行使用此函式,則您有一個游標,該游標在 UDF 中為每個外行迭代該表
即使這樣更好。它現在是表值並像視圖一樣擴展。
create function fnIsReportingTo ( @BossID int, @EmployeeID int) RETURNs table AS return ( select CAST(COUNT(*) AS bit) AS FooBar from dbo.fnGetEmployeeHierarchy(@BossID) where employeeID=@employeeID) GO