Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » SQL 方言和兼容性

 

使用 SQL Flagger 测试 SQL 遵从性

在 SQL Anywhere 中,数据库服务器和 SQL 预处理器 (sqlpp) 可标识作为服务商扩充、不符合特定 ISO/ANSI SQL 标准、或者 UltraLite 不支持的 SQL 语句。此功能称为 SQL Flagger,首次作为 ISO/ANSI 9075-1999 SQL 标准(在本文档中称为 SQL/1999)的可选 SQL 语言功能 F812 引入。SQL Flagger 帮助应用程序开发人员标识违反 SQL 语言指定子集的 SQL 语言构造。SQL Flagger 还可用于确保符合 SQL 标准的核心特性,或符合核心特性和可选特性的组合。也可以在原型化使用 SQL Anywhere 的 UltraLite 应用程序时使用 SQL Flagger,以确保所使用的 SQL 受 UltraLite 支持。

由于空间数据支持标准化为 SQL/MM 标准 (ISO/IEC 13249-3) 的第 3 部分,所以空间函数、操作和语法不受 SQL Flagger 支持,而且会标记为供应商扩充。

尽管 SQL 语句的语法和语义元素均需要 SQL Flagger 进行分析,但 SQL Flagger 旨在提供对遵从性的静态、编译时检查。语法遵从性的一个示例测试是在 INSERT 语句中缺少可选 INTO 关键字(例如,INSERT Products VALUES( ... )),它是 SQL 语言的 SQL Anywhere 语法扩充。使用不带 INTO 关键字的 INSERT 语句会被标记为服务商扩充,因为 ANSI SQL/2008 标准要求使用 INTO 关键字。但是,请注意,INTO 关键字对于 UltraLite 应用程序是可选的。

键连接也会被标记为服务商扩充。如使用 JOIN 关键字并且没有 ON 子句,则缺省情况下使用键连接。键连接使用现有外键关系连接表。UltraLite 不支持键连接。例如,以下查询指定了 Products 和 SalesOrderItems 表之间的隐式连接条件。此查询被 SQL Flagger 标记为服务商扩充。

SELECT * FROM Products JOIN SalesOrderItems;

SQL Flagger 功能不依赖于 SQL 语句的执行;所有标记逻辑仅作为静态、编译时过程执行。

 另请参见

调用 SQL Flagger
标准和兼容性