我刚刚创建了一个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
有帮助吗?

解决方案

标量 UDF必须具有模式资格。您不需要合格名称的数据库部分,除非当然在其他数据库中。

SELECT [dbo].[fnIsReportingTo] (50,1132)

在《从条款》中,您只能使用 桌子价值 功能

“功能类型” 在MSDN中

编辑:作为一个观察,我倾向于避免:

  • 嵌套UDFS
  • 使用标量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
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top