我最近在 AWS 中的 SQL Server 2019 (14.0.3192.2) 上编写了一个存储过程,该过程毫无问题地使用了该函数STRING_AGG
。当我将代码移至本地测试数据库时,它抱怨该方法。
经过研究,我开始将我的本地 sql server db 服务从 14.x 版本更新到最新的 15.0.2 并尝试再次安装 sproc;对失败
'"'',STRING_AGG(ActionDATE, ''","''),''"' 附近的语法不正确。
自 SQL Server 2017 以来,此功能一直是可行的……因此在 2019 的本地版本中缺失有点令人费解。
问题
除了安装 SQL Server 2019 Developer Edition 来解决这个问题,我还有什么办法?
意图
请注意,失败行STRING_AGG
是尝试创建一个 JSON 日期子数组,例如
[ '01/24/2020', '01/28/2020' ]
:
代码
CREATE PROCEDURE [hcwfba].[GetOperationsAndActionDates]
@operationId int,
@locationId int
AS
WITH [DATA] AS (SELECT DISTINCT id_Operation, id_Location , CONVERT(varchar, ActionDATE ,101) AS [ActionDATE] FROM OperationDetail)
SELECT distinct
PD.id_Operation
, PD.id_Location
, JSON_QUERY((SELECT CONCAT(''["'',STRING_AGG(ActionDATE, ''","''),''"]'') FROM [DATA] DT2 WHERE DT2.id_Location = PD.id_Location)) As Dates
FROM [DATA] PD
WHERE PD.id_Operation = @operationId
AND PD.id_Location = @locationId
FOR JSON AUTO;
RETURN @@ROWCOUNT
JSON 结果
[
{
"id_Operation": 13,
"id_Location": 8675309,
"Dates": [
"12/03/2018",
"08/27/2018",
"10/22/2018"
]
}
]
根据我的评论:您是否尝试过使用该
STRING_AGG()
函数和一个非常简单的测试用例来确认这是该函数的问题,而不是您在主查询中的语法问题?似乎您的语法格式不正确,而不是
STRING_AGG()
您的实例版本上没有该功能。