通过 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? (我得到“登录失败”)