如何在SQL Server中解释Foxpro语法?

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

我有一个需求,需要将 Foxpro SQL 语法转换为 SQL Server。 SQL Server 中以下 Foxpro 代码的适当等效项是什么?

完整声明如下:

FoxPro 中的 DBF 更新语句:

REPLACE ALL Column1 WITH "N/A" FOR Column2="Some string value"=.f.

我想了解

Column2="Some string value"=.f.
部分的含义。

根据我的假设,此代码对应于 SQL Server 中的以下代码:

columnName <> "String Value"

请多指教!

sql sql-server visual-foxpro foxpro
1个回答
0
投票

根据 FoxPro 文档的方便的非官方备份镜像,(因为微软已经开始复制苹果的策略,假装其旧产品的文档不存在)我们可以将其分解:

REPLACE ALL Column1 WITH "N/A" FOR Column2="Some string value"=.f.
  • REPLACE
    就像 SQL 的
    UPDATE
    MERGE

  • ALL
    中的
    REPLACE ALL
    表示应处理表中的所有记录。

  • WITH "N/A"
    表示
    "N/A"
    是要存储在
    Column1
    中的新字符串/文本值。

  • FOR
    表示行谓词的开始(这看起来很愚蠢,因为
    ALL
    也是 一个行谓词)。

  • Column2 = "Some string value" = .f.
    是实际的谓词表达式。

    • FoxPro(至少)有 2 个比较运算符
      =
      ==
      ==
      运算符专门用于 精确 文本相等性,而
      =
      对于确定等价性有更宽松的规则。
    • .F.
      (或
      .f.
      )是文字
      false
      值,
      .T.
      (或
      .t.
      )是文字
      true
      值。
    • 令人烦恼的是,谓词的形式为
      x = y = false
      (而不是
      ( x = y ) = false
      x = ( y = false )
      - 我找不到任何权威文档:FoxPro 的运算符结合性,但从上下文来看,很明显其意图是
      ( Column2 = "Some string value" ) = false
      -可以写成
      FOR Column2 <> "Some string value"
  • 所以这个

    REPLACE ALL
    声明将:

    1. 查找
      Column2
      不等于
      "Some string value"
    2. 的所有行
    3. 在这些行中才会设置
      Column1 = "N/A"
  • SQL Server 的等效 T-SQL 是:

    UPDATE
         tableNameGoesHere
    SET
         Column1 = 'N/A'
    WHERE
         Column2 <> N'Some string value';
    
    • 尽管请记住,SQL Server 的
      UPDATE
      (以及
      MERGE
      ,如果你敢的话)DML 语句确实比 FoxPro 拥有更多的功能 - 例如,考虑使用
      OUTPUT
      子句返回实际更改的内容将数据发送到客户端或放入表中,而无需另一个
      SELECT
      - 并且
      MERGE
      让您可以在单个语句中同时执行
      UPDATE
      INSERT
      DELETE
      有警告) - 所以我的观点是,我认为您应该考虑利用这个机会来探索在进行 VFP 到 MSSQL 移植工作时如何积极改进产品/项目的代码库和功能/特性。
© www.soinside.com 2019 - 2024. All rights reserved.