Sql server 2008 r2 SQL server尝试访问使用dbo“无效对象名称'dbo.function\u Client'创建的udf函数时。”

Sql server 2008 r2 SQL server尝试访问使用dbo“无效对象名称'dbo.function\u Client'创建的udf函数时。”,sql-server-2008-r2,Sql Server 2008 R2,您好,我已经在SQLServer2008中创建了一个udf函数。。。 当我试图访问它时,它给出了一个错误 无效的对象名称“dbo.Function\u客户端” 我想从表中返回记录的计数,并将其分配给要返回的变量…所以它是一个标量函数。。。在内部,我实现了if-else逻辑 下面是我的udf CREATE FUNCTION [dbo].[Function_Clients] (@ClientAlias varchar(10) , @TimePeriod int, @TypeOfTimePerio

您好,我已经在SQLServer2008中创建了一个udf函数。。。 当我试图访问它时,它给出了一个错误 无效的对象名称“dbo.Function\u客户端” 我想从表中返回记录的计数,并将其分配给要返回的变量…所以它是一个标量函数。。。在内部,我实现了if-else逻辑

下面是我的udf

CREATE FUNCTION [dbo].[Function_Clients] (@ClientAlias varchar(10) ,
  @TimePeriod int, @TypeOfTimePeriod varchar(1))

RETURNS INT
AS
BEGIN
  DECLARE @COUNT INT;

  IF(@ClientAlias='AEP' AND @TypeOfTimePeriod ='M')
     Set @COUNT =  (SELECT DISTINCT COUNT(*) AS 'NO_AEP' from dbo.Engagement INNER JOIN
        dbo.Client ON dbo.Engagement.ClientIdentifier = dbo.Client.ClientIdentifier 
    WHERE (dbo.ClientInvolvementRole.ClientInvolvementID = '1356790AERTY') 
    AND (CONVERT(datetime, dbo.Engagement.EndDate, 103) 
    <= CONVERT(datetime, DATEADD(MONTH, @TimePeriod , GETDATE()), 103))  


ELSE

---SAME ABOVE CODE BUT REPLACING MONTH WITH DAY AS 
---"DATEADD(DAY,@TimePeriod , GETDATE()), 103)" IN WHERE CONDITION  .

...if else (for various client alias)

RETURN @COUNT;  
END
GO
对于每个@clientalias,我希望根据@TypeOfTimePeriod中的输入添加月份部分和部分。 例如,@TypeOfTimePeriod='M'表示月份,或'D'表示要添加到dateadd部分的日期

我从dbo.Clients'AEP',12,'M'这样调用select*

但这是一个明显的错误 对象名称“dbo.Function\u NoOfClients”无效

我可以使用dbo.view1访问视图。。。但不是这个udf。。。 我的udf中有任何问题…请帮助我…

使用

SELECT dbo.Clients('AEP',12,'M')

注意

用法的差异除了Oleg指出的SELECT dbo.func和SELECT*FROM dbo.func之间的差异外,您是否考虑过合并一些逻辑?例如,当您可以简单地提前计算结束日期或使用CASE表达式时,您有两个查询。dbo.Engagement.EndDate也是日期时间或字符数据类型吗?还有几个其他注释:您认为SELECT DISTINCT COUNT*与SELECT COUNT*有什么不同?为什么在WHERE子句中引用dbo.ClientInvolvementRole,而它不是查询的一部分?这个函数怎么可能被正确地解析和创建?@Aaron我输入了这个ClientInvolvementRole而不是client.ClientInvolvementID,这是一个打字错误。。关于你的第二个问题,是的,时间到了