错误 - 函数中包含的 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 子句或聚合函数的错误?