首页 > 解决方案 > Azure sql server 数据库和 MS Access - STRING_AGG 不是可识别的内置函数名称

问题描述

我有一个托管在 Microsoft Azure 上的 SQL 服务器数据库,以 MS Access 作为前端。我在 SSMS 18.8 中编写了如下查询

SELECT p.Full_Citation AS [Full Citation], p.Reference, p.StudyID AS [Study ID], t.RefID AS [Database Reference], p.Primary_Secondary_Source AS [Primary/Secondary], p.Linked_Publications AS [Linked Publications], 
p.Publication_Type AS [Publication Type], STRING_AGG(STUFF(COALESCE(' ' + Trial_Name, '') + COALESCE(' ' + Trial_Number, ''), 1, 1, ''), ', ') AS Trials
FROM FTS_Trials t
INNER JOIN Papers p
ON p.RefID = t.RefID
WHERE p.Project = 'TST_TST_1'
GROUP BY p.Full_Citation, p.Reference, p.StudyID, t.RefID, p.Primary_Secondary_Source, p.Linked_Publications, p.Publication_Type;

这会产生以下输出:

完整引用 参考 研究编号 数据库参考 小学/中学 链接的出版物 出版物类型 试验
1 无效的 无效的 测试 (2021) TST_TST_1-1-测试(2021) 无效的 无效的 无效的 85,示例,测试 1
2 无效的 无效的 测试 (2019) TST_TST_1-2-测试 (2019) 无效的 无效的 无效的 测试 2

我遇到的问题是,当我尝试在 MS Access 中查询的 SQL 视图中运行此代码时,它会出现“表达式中的未定义函数'STRING_AGG'。”。谁能解释为什么这在 SSMS 中有效,但在 Access 中无效,我是否遗漏了一些明显的东西?

我还尝试了一种仅使用 STUFF() 函数的不同方法,其方式与此问题T-SQL Concatenate & group multiple rows into a single row的第一个答案类似。同样,这在 SSMS 中工作正常,但 MS Access 告诉我语法中存在查询错误。此外,此查询没有像上面那样结合 Trial_Name 和 Trial_Number。我可以使用 MS Access 采取另一种方法吗?

对于一些背景知识,查询将附加到用户单击的按钮,理想情况下需要显示查询,然后将其导出到 Excel 文件。我已经为其他查询设置了这个,但是想要在一行中连接给定引用的所有试验(Trial_Name + Trial_Number),这使得这个场景更难解决。

标签: sqlsql-servervbams-access

解决方案


Access 中的“视图”概念与 SQL 中真正的视图概念无关。SQL 中的视图是您在数据库中创建并充当表的对象。SQL 视图可以读取也可以写入(INSERT、UPDATE、DELETE、MERGE...),但有一些限制。

因此,您必须在 SQL Server 中创建视图并将其用作 Access 中的表。


推荐阅读