我试图将Access应用程序的整个后端迁移到SQL Server上。我的项目的第一部分涉及移动所有表,同时在迁移后进行最小的更改(没有SQL视图,传递查询等)。
我有两个问题,特别是我在这里使用的:
ProductionSystemUnAllocatedPurchases - 成功执行并返回结果集。
这是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 - 提供“无效操作”错误消息
现在对我来说奇怪的是第一个查询工作得很好,但第二个使用第一个作为源表,在执行时给出了这个错误信息。此查询与访问后端完美匹配,但SQL Server表失败。有任何想法吗?
QtyAvailableOnPurchase
可以为NULL吗?这可以解释为什么Sum
失败。请改用Nz(QtyAvailableOnPurchase,0)
。
我的方法是分解查询。创建两个查询:
您将轻松检查每一步。
我设法找到了这个错误的解决方案。似乎问题不在于查询,而在于SQL Server上的数据类型。 SQL Server迁移助手(SSMA)自动将任何Number(Double)字段映射到SQL Server上的float。此映射需要手动更改为Decimal。
现在根据这个SO帖子,Decimal是其精度高达38点的首选(这对于我的应用程序来说已经足够了),而float允许的不止于此,数据以近似值存储。
资料来源:Difference between numeric, float and decimal in SQL Server