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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » SQL 方言和兼容性 » SQL 方言

 

Transact-SQL 兼容性

SQL Anywhere 支持 Transact-SQL 中相当大的一部分,Transact-SQL 是 Sybase Adaptive Server Enterprise 所支持的 SQL 方言。本节介绍 SQL Anywhere 和 Adaptive Server Enterprise 之间的 SQL 兼容性。

目标

SQL Anywhere 对 Transact-SQL 的支持可以达到以下目的:

  • 应用程序可移植性   所编写的许多应用程序、存储过程和批处理文件都可以与 Adaptive Server Enterprise 数据库和 SQL Anywhere 数据库一起使用。

  • 数据可移植性   SQL Anywhere 和 Adaptive Server Enterprise 数据库之间可以轻松地相互进行数据交换和复制。

主要的目标是编写既可用于 Adaptive Server Enterprise 又可用于 SQL Anywhere 的应用程序。现有的 Adaptive Server Enterprise 应用程序通常需要做出一些更改才能在 SQL Anywhere 数据库上运行。

怎样才能支持 Transact-SQL

SQL Anywhere 通过以下形式支持 Transact-SQL:

  • 许多 SQL 语句在 SQL Anywhere 和 Adaptive Server Enterprise 之间兼容。

  • 对于某些语句(尤其是在过程、触发器和批处理语句中使用的过程语言),将支持单独的 Transact-SQL 语句以及 SQL Anywhere 的先前版本中所支持的语法。对于这些语句,SQL Anywhere 支持 SQL 的两种方言。这些方言称作 Transact-SQL—Adaptive Server Enterprise 的方言和 Watcom-SQL—SQL Anywhere 的方言。

  • 过程、触发器或批处理将以 Transact-SQL 或 Watcom-SQL 方言执行。在整个批处理或过程中,必须仅使用一种方言的控制语句。例如,每种方言都有不同的流控制语句。

下图说明了这两种方言的重叠情况。

两个圆圈的维恩图。两个圆圈的非重叠部分表示在 SQL Anywhere 和 Transact-SQL 中具有不同语法的语句,例如 CREATE PROCEDURE 和 CREATE TRIGGER。重叠区域表示在两种服务器中都相同的语句,例如 SELECT、INSERT、UPDATE 和 DELETE。
相似之处和差异

在处理现有数据时,SQL Anywhere 支持大多数的 Transact-SQL 语言元素、函数和语句。例如,SQL Anywhere 支持所有数值函数、集合函数、日期和时间函数以及除了一个字符串函数之外的所有字符串函数。又比如,SQL Anywhere 还支持使用连接的扩展 DELETE 和 UPDATE 语句。

另外,SQL Anywhere 还支持大多数的 Transact-SQL 存储过程语言(CREATE PROCEDURE 和 CREATE TRIGGER 语法、控制语句等)以及 Transact-SQL 数据定义语言语句的许多(但不是所有)方面。

每种产品所支持的体系结构和配置功能存在着设计上的差异。设备管理、用户管理和维护任务(如备份)往往是因系统而异的。即使在这种情况下,SQL Anywhere 仍将 Transact-SQL 系统表作为视图来提供(在视图中,在 SQL Anywhere 中没有任何意义的表将不显示任何行)。此外,SQL Anywhere 为某些常见的管理任务提供了一组系统过程。

在讨论这些方言的数据操作和数据定义语言等兼容性高的方面之前,本章将首先讨论一些差异最为明显的系统层面上的问题。

仅限 Transact-SQL

SQL Anywhere 所支持的某些 SQL 语句只在一种方言中使用,而不在另一种方言中使用。您不能在一个过程、触发器或批处理中混用两种方言。例如,SQL Anywhere 支持以下语句,但这些语句仅用于 Transact-SQL 方言:

  • Transact-SQL 控制语句 IF 和 WHILE

  • Transact-SQL 的 EXECUTE 语句

  • Transact-SQL 的 CREATE PROCEDURE 和 CREATE TRIGGER 语句

  • Transact-SQL 的 BEGIN TRANSACTION 语句

  • Transact-SQL 过程或批处理中可以使用以分号分隔的 SQL 语句

仅限 SQL Anywhere

Adaptive Server Enterprise 不支持以下语句:

  • 控制语句 CASE、LOOP 和 FOR

  • IF 和 WHILE 的 SQL Anywhere 版本

  • CALL 语句

  • CREATE PROCEDURE、CREATE FUNCTION 和 CREATE TRIGGER 语句的 SQL Anywhere 版本

  • 由分号分隔的 SQL 语句

注意

不能在一个过程、触发器或批处理中混用两种方言。这意味着:

  • 可以在一个批处理、过程或触发器中同时包含仅限 Transact-SQL 的语句以及属于两种方言的语句。

  • 可以在一个批处理、过程或触发器中同时包含 Adaptive Server Enterprise 不支持的语句以及两种服务器都支持的语句。

  • 不能在一个批处理、过程或触发器中同时包含仅限 Transact-SQL 的语句和仅限 SQL Anywhere 的语句。