Babelfish 中的 T-SQL 差异
下面,您可以找到当前版本 Babelfish 支持的 T-SQL 功能表,其中包含一些关于行为与 SQL Server 行为差异的注释。
有关各种版本支持的更多信息,请参阅Babelfish 的各个版本支持的功能。有关当前不支持功能的信息,请参阅Babelfish 中不支持的功能。
Babelfish 可用于 Aurora PostgreSQL 兼容版。有关 Babelfish 版本的更多信息,请参阅 Aurora PostgreSQL 版本注释。
功能或语法 | 行为或差异的描述 |
---|---|
\(行延续字符) | 当前不支持字符串和十六进制字符串的行延续字符(换行符前的反斜杠)。对于字符串,反斜杠换行符被解释为字符串中的字符。对于十六进制字符串,反斜杠换行符会导致语法错误。 |
@@version |
|
聚合函数 |
部分支持聚合函数(支持 AVG、COUNT、COUNT_BIG、GROUPING、MAX、MIN、STRING_AGG 和 SUM)。有关不支持聚合函数的列表,请参阅不支持的函数。 |
ALTER TABLE |
仅支持添加或删除单个列或约束。 |
ALTER TABLE..ALTER COLUMN |
目前无法指定 NULL 和 NOT NULL。要更改列是否可为 null 值,请使用 PostgreSQL 语句 ALTER TABLE..{SET|DROP} NOT NULL。 |
没有列别名的空白列名 |
|
CHECKSUM 函数 |
Babelfish 和 SQL Server 对 CHECKSUM 函数使用不同的哈希算法。因此,由 Babelfish 中的 CHECKSUM 函数生成的哈希值可能与由 SQL Server 中的 CHECKSUM 函数生成的哈希值不同。 |
列原定设置 |
创建列原定设置时,约束名称将被忽略。要删除列原定设置,请使用以下语法: |
Constraint_name |
在 SQL Server 中,约束名称在表所属的架构中必须是唯一的。但是,在 Babelfish 中,这仅适用于 PRIMARY KEY 和 UNIQUE 约束。其它类型的约束不受此限制所限。 |
约束 |
PostgreSQL 不支持打开和关闭单个约束条件。将忽略语句,并发出警告。 |
具有 IGNORE_DUP_KEY 的约束 |
不使用此属性创建约束。 |
CREATE、ALTER、DROP SERVER ROLE |
ALTER SERVER ROLE 仅支持 对于登录(服务器主体)、数据库和数据库用户(数据库主体)的概念,Babelfish 中的 T-SQL 用户的体验类似于 SQL Server。 |
CREATE、ALTER LOGIN 子句支持有限的语法 |
支持 CREATE LOGIN... PASSWORD 子句、...DEFAULT_DATABASE 子句和 ...DEFAULT_LANGUAGE 子句。支持 ALTER LOGIN... PASSWORD 子句,但 ALTER LOGIN... OLD_PASSWORD 子句不受支持。只有系统管理员成员的登录名才能修改密码。 |
CREATE DATABASE 区分大小写的排序规则 |
CREATE DATABASE 语句不支持区分大小写的排序规则。 |
CREATE DATABASE 关键字和子句 |
不支持 COLLATE 和 CONTAINMENT=NONE 以外的选项。COLLATE 子句被接受并且始终设置为 |
CREATE SCHEMA... 支持子句 |
您可以使用 CREATE SCHEMA 命令创建空架构。使用其他命令创建架构对象。 |
Babelfish 上的数据库 ID 值不同 |
主数据库和 tempdb 数据库将不是数据库 ID 1 和 2。 |
支持 FORMAT 日期类型函数,但存在以下限制 |
不支持单字符子午线。 对于大于 1000 的年份,SQL Server 中的“yyy”格式返回 4 位数,但对于其他年份,只返回 3 位数字。 不支持“g”和“R”格式 “vi-VN”区域设置翻译略有不同。 |
超过 63 个字符的标识符 |
PostgreSQL 最多为标识符支持 63 个字符。Babelfish 将长度超过 63 个字符的标识符转换为包含原名哈希的名称。例如,创建为“AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890”的表可能转换为“ABC123456789012345678901234567890123456789012345678901234567890”。 |
IDENTITY 列支持 |
IDENTITY 列支持数据类型 tinyint 、smallint 、int 、bigint 。numeric 和 decimal 。SQL Server 为 IDENTITY 列中的数据类型 PostgreSQL 为 IDENTITY 列中的数据类型 |
使用 IGNORE_DUP_KEY 的索引 |
创建包含 IGNORE_DUP_KEY 的索引的语法会创建一个索引,就像省略此属性一样。 |
包含 32 列以上的索引 |
索引不能包含超过 32 列。包含的索引列在 PostgreSQL 中计入最大值,但在 SQL Server 中不计。 |
索引(聚集) |
聚集索引的创建就像指定了 NONCLUSTERED 一样。 |
索引子句 |
忽略以下子句:FILLFACTOR、ALLOW_PAGE_LOCKS、ALLOW_ROW_LOCKS、PAD_INDEX、STATISTICS_NORECOMPUTE、OPTIMIZE_FOR_SEQUENTIAL_KEY、SORT_IN_TEMPDB、DROP_EXISTING、ONLINE、COMPRESSION_DELAY、MAXDOP 和 DATA_COMPRESSION |
JSON 支持 |
不能保证名称/值对的顺序。但数组类型保持不受影响。 |
LOGIN 对象 |
不支持 LOGIN 对象以外的所有选项,但以下各项除外:PASSWORD、DEFAULT_DATABASE、DEFAULT_LANGUAGE、ENABLE、DISABLE。 |
NEWSEQUENTIALID 函数 |
作为 NEWID 实施;不保证顺序行为。调用 |
支持 OUTPUT 子句,但存在以下限制 |
同一个 DML 查询中不支持 OUTPUT 和 OUTPUT INTO。不支持在 OUTPUT 子句中对 UPDATE 或 DELETE 操作的非目标表进行引用。OUTPUT... DELETED *、INSERTED * 在同一个查询中不受支持。 |
过程或函数参数限制 |
Babelfish 最多支持 100 个过程或函数的参数。 |
ROWGUIDCOL |
此子句当前被忽略。引用 |
SEQUENCE 对象支持 |
数据类型 tinyint、smallint、int、bigint、numeric 和 decimal 支持 SEQUENCE 对象。 对于 SEQUENCE 中的数据类型 numeric 和 decimal,Aurora PostgreSQL 支持的精度达到 19 位。 |
服务器级角色 |
支持 |
除 |
支持 |
SQL 关键字 SPARSE | 接受并忽略关键字 SPARSE。 |
SQL 关键字子句 |
此子句当前被忽略。 |
索引和约束的 SQL 关键字 |
Babelfish 接受并忽略 |
|
|
tempdb 在重启时没有重新初始化 |
重新启动数据库时,不会删除在 tempdb 中创建的永久对象(如表和过程)。 |
TEXTIMAGE_ON 文件组 |
Babelfish 忽略 |
时间精度 |
Babelfish 对小数秒支持 6 位数的精度。预计这种行为不会产生负面影响。 |
事务隔离级别 |
以与 READCOMMITTED 相同的方式对待 READUNCOMMITTED。 |
虚拟计算列(非持久性) |
虚拟计算列是作为永久列创建的。 |
无 SCHEMABINDING 子句 |
函数、过程、触发器或视图不支持此子句。已创建对象,但仿佛指定了 WITH SCHEMABINDING。 |