【问题标题】:Azure sql server database and MS Access - STRING_AGG is not a recognised built-in function nameAzure sql server 数据库和 MS Access - STRING_AGG 不是可识别的内置函数名称
【发布时间】:2021-06-06 07:10:30
【问题描述】:

我有一个托管在 Microsoft Azure 上的 SQL Server 数据库,并以 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;

这会产生以下输出:

Full Citation Reference Study ID Database Reference Primary/Secondary Linked Publications Publication Type Trials
1 NULL NULL Testing (2021) TST_TST_1-1-Testing (2021) NULL NULL NULL 85, Example, Test 1
2 NULL NULL Testing (2019) TST_TST_1-2-Testing (2019) NULL NULL NULL Test 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)连接在一行中,这使得这个场景更难解决。

【问题讨论】:

  • MS Access 没有string_agg()stuff() 或任何对此特别有用的东西。我的建议是更改数据库。也就是说,您可以在线找到字符串聚合 VBA 函数。
  • 使用传递查询。在那里您可以使用 SQL Server 语法和功能。
  • @Andre 非常感谢这一切都很好!
  • @GordonLinoff 访问只是这里的前端,这种情况可能是通过开始使用 Access 作为数据库,设计所有表单和报告等,然后意识到它是一个不可扩展的带有锁定的粪便问题比比皆是,所以换成前端更好的后端数据库..

标签: sql sql-server vba ms-access


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 2017-02-08
    • 1970-01-01
    • 2017-06-15
    • 2020-12-06
    • 1970-01-01
    • 2014-06-12
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多