将查询从 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 中无效,您应该改用IIF
或SWITCH
CAST
也无效。您可以使用CStr
转换为字符串
GetDate
也无效,您应该使用DATE()
。
如果你想减去 182 天,那么你应该这样做 DATEADD('d', DATE() , -182)
但处理此问题的最方便的方法可能是进行将在 SQL Server 而不是 MS Access 上执行的直通查询(因此不在链接表上),因此您可以保留 SQL Server 语法。搜索该路径。
【讨论】:
通过是我一直在寻找的——谢谢以上是关于将查询从 SQL 服务器复制到 MS Access的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件