Sql server 2008 r2 SQL server尝试访问使用dbo“无效对象名称'dbo.function\u Client'创建的udf函数时。”
您好,我已经在SQLServer2008中创建了一个udf函数。。。 当我试图访问它时,它给出了一个错误 无效的对象名称“dbo.Function\u客户端” 我想从表中返回记录的计数,并将其分配给要返回的变量…所以它是一个标量函数。。。在内部,我实现了if-else逻辑 下面是我的udfSql 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
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,这是一个打字错误。。关于你的第二个问题,是的,时间到了