【问题标题】:Problems Converting Visual FoxPro Stored Procs to equivalent MS SQL Server将 Visual FoxPro 存储过程转换为等效的 MS SQL Server 时出现问题
【发布时间】:2012-06-13 03:12:30
【问题描述】:

我们在将 Visual FoxPro 迁移到 SQL Sever 时遇到了一些严重问题。

我对 FoxPro 了解不多。任何做过此迁移的人都可以帮我解决下面的问题

如何为 FoxPro 中的SET ENGINEBEHAVIOR 70 (SET ENGINEBEHAVIOR 80) 编写等效的 SQL 语句。SET ENGINEBEHAVIOR 的目的到底是什么?我读到了一些地方,它列出了既不是聚合函数也不属于 group by 子句的所有字段。

非常感谢任何帮助!

【问题讨论】:

    标签: sql visual-foxpro


    【解决方案1】:

    我相信这是 FOXPro 中的兼容性声明...报告脚本是否包含该声明?如果您现在直接在 SQL 服务器上运行,则不需要它...我认为它主要用于 Foxpro 格式。

    来自 MSDN 的完整信息在这里:http://msdn.microsoft.com/en-us/library/aa978316(v=vs.71).asp

    编辑添加: 实际上,它似乎确实会影响分组行为。从链接:

    您可以在 SELECT 列表中包含聚合函数,而无需在 GROUP BY 子句中包含它。 例如,以下代码对字段 company 使用 COUNT( ) 函数,但 GROUP BY 子句中没有字段 company。 SELECT COUNT(company), country FROM Customer GROUP BY country

    如果您要退出 FoxPro,我认为不再需要此声明。

    【讨论】:

    • 哇.. 回复速度非常快!所以你的意思是我可以忽略 SET ENGINEBEHAVIOR 命令并继续重写其他 foxpro 语句?非常感谢乔恩的帮助!
    【解决方案2】:

    第 12 条准确地描述了 SET ENGINE BEHAVIOR 的运作方式。请注意,并非所有 SQL 数据库都支持此功能,并且要求您在执行 SQL 查询时输入所有非聚合列。

    假设您在订单表中有 10 条客户记录,并且想要计算订单,但该表还有订单日期、总金额、送货地址等。此人有不同的订单送货到不同的位置...通过做

    select customerID, count(*) as NumberOfOrders, DeliverAddress, TotalOrder
       from orders 
       group by CustomerID
    

    某些 SQL 引擎会唠叨您没有将“DeliverAddress”或“TotalOrder”作为 group by 的一部分。在 VFP 中,这些列将只返回为客户找到的第一条记录,无论找到多少条记录。

    我相信 MySQL 也支持这种不需要“非聚合”列的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2020-06-06
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多