若要编写在 SQL Anywhere 数据库和 Adaptive Server Enterprise 数据库上都能运行的查询,应遵循下面两条标准:
查询中的数据类型、表达式和搜索条件必须兼容。
SELECT 语句本身的语法必须兼容。
本节将介绍兼容的 SELECT 语句语法,并说明兼容的数据类型、表达式和搜索条件。此示例假定 quoted_identifier 设置为 Off:这是 Adaptive Server Enterprise 的缺省设置,但不是 SQL Anywhere 的缺省设置。
SQL Anywhere 支持 Transact-SQL SELECT 语句的以下子集:
SELECT [ ALL | DISTINCT ] select-list ...[ INTO #temporary-table-name ] ...[ FROM table-spec [ HOLDLOCK | NOHOLDLOCK ], ... table-spec [ HOLDLOCK | NOHOLDLOCK ], ... ] ...[ WHERE search-condition ] ...[ GROUP BY column-name, ... ] ...[ HAVING search-condition ] [ ORDER BY { expression | integer } [ ASC | DESC ], ... ]
select-list:
table-name.*
| *
| expression
| alias-name = expression
| expression as identifier
| expression as string
table-spec: [ owner . ]table-name ...[ [ AS ] correlation-name ] ...[ ( INDEX index_name [ PREFETCH size ][ LRU | MRU ] ) ]
alias-name: identifier | 'string' | "string"
SQL Anywhere 不支持 Transact-SQL SELECT 语句语法的以下关键字和子句:
SQL Anywhere 不支持对 GROUP BY 子句的 Transact-SQL 扩展(它允许引用未用于创建组的列和表达式)。在 Adaptive Server Enterprise 中,此扩展会生成摘要报告。
将会对表的说明的性能参数部分进行语法分析,但不会产生任何影响。
SQL Anywhere 支持 HOLDLOCK 关键字。利用 HOLDLOCK,指定表或视图上的共享锁会更为严格,因为当不再需要数据页时不会释放共享锁。对于已为其指定了 HOLDLOCK 的表,查询将在隔离级别 3 执行。
HOLDLOCK 选项仅应用于指定该选项的表或视图,并且仅应用于该选项所在的语句所定义的事务期间。如果将隔离级别设置为 3,则会将 HOLDLOCK 应用于事务中的每一个 SELECT 语句。您不能在一个查询中同时指定 HOLDLOCK 和 NOHOLDLOCK 选项。
SQL Anywhere 识别 NOHOLDLOCK 关键字,但该关键字不会产生任何影响。
Transact-SQL 使用 SELECT 语句向局部变量赋值:
SELECT @localvar = 42; |
SQL Anywhere 中的相应语句为 SET 语句:
SET @localvar = 42; |
Adaptive Server Enterprise 不支持 SELECT 语句语法的以下子句:
Adaptive Server Enterprise 在 WHERE 子句中使用连接运算符,而不使用 FROM 子句和 ON 条件来进行连接。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |