我刚刚创建了一个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发布于 2011-02-14 20:40:40
标量UDFS必须使用架构进行限定。当然,您不需要限定名的数据库部分,除非它位于不同的数据库中。
SELECT [dbo].[fnIsReportingTo] (50,1132)在FROM子句中,只能使用表值函数。
参见MSDN中的“职能类型”
编辑:作为观察,我倾向于避免:
如果对另一个表的每一行使用此函数,则有一个游标对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)
GOhttps://dba.stackexchange.com/questions/1221
复制相似问题