Babelfish 中的 T-SQL 差異 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Babelfish 中的 T-SQL 差異

您可以在以下內容找到 Babelfish 目前版本支援的 T-SQL 功能的表格,其中包括一些有關行為與 SQL Server 不同的註釋。

如需各種版本的支援詳情,請參閱 Babelfish 各版本支援的功能。如需目前不支援的功能詳情,請參閱 Babelfish 不支援的功能

Babelfish 可與 Aurora PostgreSQL 相容版本一起使用。如需 Babelfish 版本的更多資訊,請參閱 Aurora PostgreSQL 版本備註

功能或語法 行為或差異的描述
\ (行連續字元) 目前不支援字元和十六進位字串的行延續字元 (換行之前的反斜線)。針對字元字串,反斜線換行會被解讀為字串中的字元。針對十六進位字串,反斜槓換行會導致語法錯誤。

@@version

@@version 傳回的值與 SQL Server 傳回的值格式略有不同。依賴 @@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。

沒有資料欄別名的空白資料欄名稱

sqlcmdpsql 公用程式以不同方式處理名稱空白的資料欄:

  • SQL Server sqlcmd 傳回空白資料欄名稱。

  • PostgreSQL psql 傳回產生的資料欄別名。

CHECKSUM 函數

Babelfish 和 SQL 伺服器將不同的雜湊演算法使用於 CHECKSUM 函數。其結果是,由 Babelfish 中的 CHECKSUM 函數產生的雜湊值可能與 SQL Server 中的 CHECKSUM 函數產生的雜湊值不同。

資料欄預設

建立資料欄預設時會忽略限制條件名稱。若要捨棄資料欄預設,請使用下列語法:ALTER TABLE...ALTER COLUMN..DROP DEFAULT...

限制條件

PostgreSQL 不支援啟用和停用個別限制條件。陳述式會被忽略,並發出警告。

使用 DESC (遞減) 資料欄建立的條件限制

使用 ASC (遞增) 資料欄建立條件限制。

條件限制搭配 IGNORE_DUP_KEY

建立的條件限制沒有此內容。

CREATE、ALTER、DROP SERVER ROLE

ALTER SERVER ROLE 僅支援 sysadmin。不支援其他所有語法。

Babelfish 中的 T-SQL 使用者,可體驗類似 SQL Server 的登入 (伺服器主體)、資料庫和資料庫使用者 (資料庫主體) 等概念。

CREATE、ALTER LOGIN 子句支援的語法有限

CREATE LOGIN... 支援 PASSWORD 子句、...DEFAULT_DATABASE 子句及 ...DEFAULT_LANGUAGE 子句。ALTER LOGIN... 支援 PASSWORD 子句,而不是 ALTER LOGIN... 不支援 OLD_PASSWORD 子句。只有以 sysadmin 成員身分登入才能修改密碼。

CREATE DATABASE 區分大小寫定序

CREATE DATABASE 庫陳述式不支援區分大小寫定序。

CREATE DATABASE 關鍵字和子句

不支援 COLLATE 和 CONTAINMENT=NONE 以外的選項。接受 COLLATE 子句,一律設定為 babelfishpg_tsql.server_collation_name 的值。

CREATE SCHEMA... 支援子句

您可以使用 CREATE SCHEMA 命令來建立空的結構描述。使用其他命令來建立結構描述物件。

資料庫 ID 值在 Babelfish 上不同

master 和 tempdb 資料庫不會是資料庫 ID 1 和 2。

FORMAT 日期類型功能的支持有以下限制

不支援單一字元子午線。

SQL 伺服器中的 "yyy" 格式對於 1000 以上的年份傳回 4 位數,但對於其他則只傳回 3 位數。

不支援 "g" 和 "R" 格式

"vi-VN" 地區設定轉換略有不同。

超過 63 個字元的識別符

PostgreSQL 支援最多 63 個字元的識別符。Babelfish 會轉換超過 63 個字元的識別符,轉換後的名稱包含原始名稱的雜湊。例如,一個建立為 "AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890" 的資料表可能會被轉換為 "ABC123456789012345678901234567890123456789012345678901234567890"。

IDENTITY 資料欄支援

IDENTITY 資料欄支援資料類型 tinyintsmallintintbigintnumericdecimal

SQL Server 在 IDENTITY 資料欄中支援資料類型 numericdecimal 精確到 38 位數。

PostgreSQL 在 IDENTITY 資料欄中支援資料類型 numericdecimal 精確到 19 位數。

索引搭配 IGNORE_DUP_KEY

如果語法建立的索引包含 INNORE_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 物件

不支援登入物件的所有選項,除了密碼、預設資料庫、預設語言、啟用、停用。

NEWSEQUENTIALID 函數

實作成 NEWID;不保證循序行為。呼叫 NEWSEQUENTIALID 時,PostgreSQL 會產生新的 GUID 值。

支援 OUTPUT 子句,但有以下限制

不支援同一個 DML 查詢中有 OUTPUT 和 OUTPUT INTO。不支援 OUTPUT 子句中的 UPDATE 或 DELETE 操作參考非目標資料表。OUTPUT... 不支援同一個查詢中有 DELETED *、INSERTED *。

程序或函數參數限制

Babelfish 支援一個程序或函數最多有 100 個參數。

ROWGUIDCOL

目前忽略此子句。查詢參考 $GUIDGOL 會導致語法錯誤。

SEQUENCE 物件支援

SEQUENCE 物件支援資料類型 tinyint、smallint、int、bigint、numeric 及 decimal。

Aurora PostgreSQL 在 SEQUENCE 中支援資料類型 numeric 和 and decimal 精確到 19 位數。

伺服器層級角色

支援 sysadmin 伺服器層級角色。不支援其他伺服器層級角色 (sysadmin 除外)。

db_owner 除外的資料庫層級角色

支援 db_owner 資料庫層級角色和使用者定義的資料庫層級角色。不支援 db_owner 除外的資料庫層級角色。

SQL 關鍵字 SPARSE

接受和忽略關鍵字 SPARSE。

SQL 關鍵字子句 ON filegroup

目前忽略此子句。

索引和限制條件的 SQL 關鍵字 CLUSTEREDNONCLUSTERED

Babelfish 接受和忽略 CLUSTEREDNONCLUSTERED 關鍵字。

sysdatabases.cmptlevel

sysdatabases.cmptlevel 一律設定為 120。

重新啟動時不會重新初始化 tempdb

資料庫重新啟動時,不會移除 tempdb 中建立的永久物件 (例如資料表和程序)。

TEXTIMAGE_ON filegroup

Babelfish 會忽略 TEXTIMAGE_ON filegroup 子句。

時間精確度

Babelfish 支援 6 位數精確度的小數秒。此行為尚無不良影響。

交易隔離層級

READUNCOMMITTED 和 READCOMMITTED 視為相同。

虛擬計算資料欄 (非持久性)

虛擬計算資料欄建立為持久性。

沒有 SCHEMABINDING 子句

函數、程序、觸發程序或檢視表中不支援此子句。視為未指定 WITH SCHEMABINDING 來建立物件。