将查询从 SQL 服务器复制到 MS Access

Posted

技术标签:

【中文标题】将查询从 SQL 服务器复制到 MS Access【英文标题】:Copying a query from SQL server to MS Acess 【发布时间】:2016-10-17 09:49:56 【问题描述】:

我在 SQL Server 中编写了一个运行正常的查询。

我需要在 Access 中运行此查询,因为我需要将更多数据提取到查询中。

但是,当我将 SQL 复制到 Access 中时,它不起作用,出现语法错误,查询表达式中缺少运算符。

SELECT main.Tbl_ServiceOrder.ServiceOrder
, main.Tbl_Serviceorder.BusinessPartnerNumber
, main.Tbl_ServiceOrder.ExternalPointofDeliverynumber
, main.Tbl_ServiceOrder.ServiceProduct
, main.Tbl_ServiceOrder.SOCreatedOn
, main.Tbl_ServiceOrder.MainUserStatus
, main.Tbl_ServiceOrder.MainUserStatusDesc
, main.Tbl_ServiceOrder.ReasonCode
, main.Tbl_ServiceOrder.ReasonCodeDesc
, main.Tbl_ServiceOrder.SOActualFinishDate
, main.Tbl_ServiceOrder.BasicStartDate
,CAST(CASE WHEN reasoncode <> 'CMPL'  THEN 'Pre Install' 
WHEN reasoncode = 'CMPL' and SOActualFinishDate < (getdate()-182) THEN 'SMART BAU'
ELSE 'Post Install' END as Varchar) as SMRTPot
FROM main.Tbl_ServiceOrder
WHERE main.Tbl_ServiceOrder.ServiceProduct ='SMINSTALL' 
OR main.Tbl_ServiceOrder.ServiceProduct ='SMEXCHANGE'

CAST 第一行上的WHEN 被访问突出显示为错误点。

我做错了什么?

我已尝试将演员表更改为下面的 IIF

, IIF (reasoncode <> 'CMPL','Pre Install',(IIF SOActualFinishDate < (getdate()-182),'SMART BAU','Post Install')) as SMRTPot

上面给出了查询表达式中的语法错误(逗号)

 IIF (reasoncode <> 'CMPL','Pre Install',(IIF SOActualFinishDate < (getdate()-182),'SMART BAU','Post Install')) as SMRTPot

上面给出了查询表达式中的语法错误。

好的,这就是我现在使用的:

SELECT main.Tbl_ServiceOrder.ServiceOrder
, main.Tbl_Serviceorder.BusinessPartnerNumber
, main.Tbl_ServiceOrder.ExternalPointofDeliverynumber
, main.Tbl_ServiceOrder.ServiceProduct
, main.Tbl_ServiceOrder.SOCreatedOn
, main.Tbl_ServiceOrder.MainUserStatus
, main.Tbl_ServiceOrder.MainUserStatusDesc
, main.Tbl_ServiceOrder.ReasonCode
, main.Tbl_ServiceOrder.ReasonCodeDesc
, main.Tbl_ServiceOrder.SOActualFinishDate
, main.Tbl_ServiceOrder.BasicStartDate
,Switch(reasoncode <> 'CMPL', 'Pre Install',
        reasoncode = 'CMPL' AND SOActualFinishDate < ( Getdate() - 182 ), 'SMART BAU', 
        True, 'Post Install') as SMRTPot
FROM main.Tbl_ServiceOrder
WHERE main.Tbl_ServiceOrder.ServiceProduct ='SMINSTALL' OR main.Tbl_ServiceOrder.ServiceProduct ='SMEXCHANGE'

错误信息现在找不到文件'file path\main.mdb

【问题讨论】:

***.com/questions/14920116/… 您是否查看过 Access 的 CASE 语法并将其与您的比较? 【参考方案1】:

问题太多,评论太长。

您使用的是 SQL Server 语法,而不是 MS Access SQL 语法。

WHEN...CASE 在 MS ACcess SQL 中无效,您应该改用IIFSWITCH

CAST 也无效。您可以使用CStr 转换为字符串

GetDate 也无效,您应该使用DATE()

如果你想减去 182 天,那么你应该这样做 DATEADD('d', DATE() , -182)

但处理此问题的最方便的方法可能是进行将在 SQL Server 而不是 MS Access 上执行的直通查询(因此不在链接表上),因此您可以保留 SQL Server 语法。搜索该路径。

【讨论】:

通过是我一直在寻找的——谢谢

以上是关于将查询从 SQL 服务器复制到 MS Access的主要内容,如果未能解决你的问题,请参考以下文章

更新查询的 MS Access SQL 错误

使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件

将MS Access表单日期传递到Oracle SQL

将数据从 MS Access 传输到 SQL Server

尝试连接到 SQL 表时,MS Access 2007 中的查询错误

对 SQL 文件的所有 MS Access 查询