通过 ODBC 连接到 SQL Server 的 Access 中的 MS SQL 查询

Posted

技术标签:

【中文标题】通过 ODBC 连接到 SQL Server 的 Access 中的 MS SQL 查询【英文标题】:MS SQL Query in Access via ODBC connecting to SQL Server 【发布时间】:2019-05-24 00:33:23 【问题描述】:

由于一些限制(我不会在这里讨论)。我们的架构是使用通过 ODBC SQL Server 驱动程序运行的 Access 中的查询。

以下查询产生 2 个错误:

SELECT Tbl2.columnid, 
       Tbl2.label, 
       Tbl2.group1, 
       Tbl2.group2, 
       Count(Tbl2.columnid) AS Total 
FROM   (SELECT scanned AS Group1, 
               false   AS Group2, 
               scanned AS Label, 
               scanned AS ColumnID 
        FROM   (SELECT *, 
                       ( quantity - productqty ) AS Variance 
                FROM   order_line 
                WHERE  processed = false) AS Tbl1 
        WHERE   wsid = 1 ) AS Tbl2 
WHERE  Tbl2.columnid = false 
GROUP  BY Tbl2.group1, 
          Tbl2.group2, 
          Tbl2.columnid, 
          Tbl2.label 
ORDER  BY Tbl2.group1 DESC, 
          Tbl2.group2 

错误 1:每个 GROUP BY 表达式必须至少包含一个作为外部引用的列:(#164) 错误 2:ORDER BY 位置编号 0 超出 Select 列表中的项数范围(#108)

需要注意的是,“scanned”是 SQL Server 中的一个 BIT 字段(因此 Group1、Label、ColumnId 也是位)。我相信这就是为什么 GROUP BY 和 ORDER BY 将其视为常量(值=0),导致这些错误的原因。

但我不知道如何解决这些问题。任何建议都会很棒!

PS - 使用 2 个子查询的原因是由于其他限制,我们试图获取看板中列的 ID、标签、计数。

【问题讨论】:

当 Tbl2.Group1 = 0 然后 'A' 否则 'B' 结束时按大小写排序?您可以将布尔值转换为字符,然后为相应的订单组成您想要的任何 A/B 或 B/A。如果它困扰您,可能也需要申请分组并在每个字段上。 这是直通查询吗?如果没有,你能做到吗? @DRapp 是的,这行得通。不是很理想,因为我现在需要基于类型的代码(因为我只需要对位字段执行此操作),但是可以。我会尽快添加解决方案。 @DavidBrowne-Microsoft 据我了解,直通查询将直接在 SQL Server 上运行,是否需要设置 DSN?我们也想避免 DSN。 直通查询不需要 DSN。只需在查询属性表中放置一个连接字符串。如果您使用的是 SQL Server,您将真的想使用 TSQL,而不是 Access SQL,如果不是针对此查询,则针对下一个查询。例如***.com/questions/10744170/… 【参考方案1】:

基于 DRapp 的评论和建议.. 以下作品:

SELECT Tbl2.columnid, 
       Tbl2.label, 
       Tbl2.group1, 
       Tbl2.group2, 
       Count(Tbl2.columnid) AS Total 
FROM   (SELECT IIf(scanned=True, 'Y', 'N') AS Group1, 
               'N'   AS Group2, 
               IIf(scanned=True, 'Y', 'N') AS Label, 
               IIf(scanned=True, 'Y', 'N') AS ColumnID 
        FROM   (SELECT *, 
                       ( quantity - productqty ) AS Variance 
                FROM   order_line 
                WHERE  processed = false) AS Tbl1 
        WHERE   wsid = 1 ) AS Tbl2 
WHERE  Tbl2.columnid = 'N' 
GROUP  BY Tbl2.group1, 
          Tbl2.group2, 
          Tbl2.columnid, 
          Tbl2.label 
ORDER  BY Tbl2.group1 DESC, 
          Tbl2.group2 

不理想(因为第一个子查询是动态生成的,如果组字段为位,现在需要额外处理。但有效!仍然对任何其他解决方案开放。

【讨论】:

以上是关于通过 ODBC 连接到 SQL Server 的 Access 中的 MS SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008

不使用 ODBC 将 Python 连接到 SQL Server

如何使用ODBC数据连接连接到本地SQL Server? (我得到“登录失败”)

连接到SQL Server时OLEDB / ODBC驱动程序之间有什么区别?

ODBC无法连接SQL SERVER

使用 SQL Server Driver 通过 PDO 连接到 SQL Server