使用SQL后端的Access查询中出现无法解释的“无效操作”错误

问题描述 投票:0回答:3

我试图将Access应用程序的整个后端迁移到SQL Server上。我的项目的第一部分涉及移动所有表,同时在迁移后进行最小的更改(没有SQL视图,传递查询等)。

我有两个问题,特别是我在这里使用的:

ProductionSystemUnAllocatedPurchases - 成功执行并返回结果集。

ProductionSystemUnAllocatedPurchases_Screenshot这是QtyAvailableOnPurchase的完整公式(对不起,非常复杂):

QtyAvailableOnPurchase:我相信这个领域可能是问题吗?

IIf((IIf([Outstanding Qty]>([P-ORDER-T with Qty Balance]![QTY]-[SumOfQty]), 
([P-ORDER-T with Qty Balance]![QTY]-[SumOfQty]),[Outstanding Qty]))>0, 
(IIf([Outstanding Qty]>([P-ORDER-T with Qty Balance]![QTY]-[SumOfQty]),([P- 
ORDER-T with Qty Balance]![QTY]-[SumOfQty]),[Outstanding Qty])),0)

ProductionSystemUnAllocatedPurchasesTotal - 提供“无效操作”错误消息

ProductionSystemUnAllocatedPurchasesTotal_Screenshot

现在对我来说奇怪的是第一个查询工作得很好,但第二个使用第一个作为源表,在执行时给出了这个错误信息。此查询与访问后端完美匹配,但SQL Server表失败。有任何想法吗?

sql-server database ms-access database-migration
3个回答
2
投票

QtyAvailableOnPurchase可以为NULL吗?这可以解释为什么Sum失败。请改用Nz(QtyAvailableOnPurchase,0)


1
投票

我的方法是分解查询。创建两个查询:

  1. 第一个查询选择所需数据
  2. 第二个查询应用组操作(例如Sum)

您将轻松检查每一步。


1
投票

我设法找到了这个错误的解决方案。似乎问题不在于查询,而在于SQL Server上的数据类型。 SQL Server迁移助手(SSMA)自动将任何Number(Double)字段映射到SQL Server上的float。此映射需要手动更改为Decimal。

现在根据这个SO帖子,Decimal是其精度高达38点的首选(这对于我的应用程序来说已经足够了),而float允许的不止于此,数据以近似值存储。

资料来源:Difference between numeric, float and decimal in SQL Server

© www.soinside.com 2019 - 2024. All rights reserved.