错误 - 函数中包含的 Select 语句无法将数据返回给客户端

Posted

技术标签:

【中文标题】错误 - 函数中包含的 Select 语句无法将数据返回给客户端【英文标题】:Error - Select statements included within a function cannot return data to a client 【发布时间】:2020-11-11 12:30:34 【问题描述】:

我正在尝试创建一个函数,该函数将在表中查询时间,然后根据站点返回正确的时间。

查询表中的时间有分店的开、关时间。我不确定我应该使用 CASE 还是 IF。

当我使用CASE 时,我收到此错误:

消息 444,级别 16,状态 2,过程工作时间,第 33 行 函数中包含的 Select 语句无法将数据返回给客户端。

当我打印到屏幕上时它工作正常。

/为网站的打开和关闭时间添加了这个/

DECLARE @WorkStart TIME
SET @WorkStart = '09:00'  

SELECT
    CASE    
        WHEN [Location Code] = 'OF' THEN [OpenTime]
        WHEN [Location Code] = 'MP' THEN [OpenTime]
        WHEN [Location Code] = 'GP' THEN [OpenTime]
        WHEN [Location Code] = 'EC' THEN [OpenTime]
        WHEN [Location Code] = 'WP' THEN [OpenTime]
        WHEN [Location Code] = 'ZN' THEN [OpenTime]
    END
FROM 
    [dbo].[OperationHours]

--PRINT @WorkStart
--GO

【问题讨论】:

您的错误与 CASE 无关。它与您的函数声明以及它如何尝试收集和返回适当的值有关。发布完整的函数声明,有人可以给你指导。现在是阅读文档并了解如何以及何时使用用户定义函数的好时机。 谢谢,但我不想解析位置代码。我希望它查询 operationhours 表。我正在尝试使用以下脚本 ***.com/questions/5274208/... 我只想解析开始和结束日期时间。因此我认为使用案例对我有用。每个站点在表操作时间中的不同时间打开和关闭。现在开始时间和结束时间在 9 点到 5 点是“静态的”。我希望它基于每个站点。我希望我能说得通 【参考方案1】:

首先,我认为您没有指定所有要求。 我希望您将位置代码传递给函数。

你的函数可能看起来像

CREATE FUNCTION YourFunction
(
    @locationCode varchar(2)
)
RETURNS TIME
AS
BEGIN
    DECLARE @OpenTime TIME
    DECLARE @WorkStart TIME
    SET @WorkStart = '09:00'  

    SELECT @OpenTime = [OpenTime]
    FROM [dbo].[OperationHours]
    where @locationCode = [Location Code]

    RETURN ISNULL(@OpenTime, @WorkStart)
END

【讨论】:

谢谢,但我不想解析位置代码。我希望它查询 operationhours 表。我正在尝试使用以下脚本***.com/questions/5274208/… 我只想解析开始和结束日期时间。因此我认为使用案例对我有用。每个站点在表操作时间中的不同时间打开和关闭。现在开始时间和结束时间在 9 点到 5 点是“静态的”。我希望它基于每个站点。我希望我能说得通【参考方案2】:

“函数中包含的选择语句不能将数据返回给客户端”

为了澄清错误信息:您必须将结果分配给变量并返回该变量。如您的问题所示,SELECT 会将数据集返回给客户端。如错误消息中所述,函数不允许这样做。返回数据集适用于存储过程,但不适用于函数。

修复:将 SELECT 的结果分配给变量。

上面@Illia 的回答应该有效。

【讨论】:

以上是关于错误 - 函数中包含的 Select 语句无法将数据返回给客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何在 select 语句中包含 PERCENTILE_CONT 列,而不会生成有关 ORDER BY 子句或聚合函数的错误?

g++ 编译器中包含的 g++ 幂函数

MySQL聚合函数

单击注释时,如何将数据传递给其视图控制器?

语法错误:在 select 语句中包含存储过程的结果

如何对对象中包含的列表进行排序