View a markdown version of this page

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。

AT TIME ZONE

從日光節約時間 (DST) 轉換到標準時間期間,系統會使用標準時間偏移顯示重疊期間。為釐清此點,請思考下列範例:

SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time'; GO; Result: 2022-10-30 02:00:00 +01:00

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

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

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

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

CHECKSUM 函數

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

資料欄預設

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

Constraint_name

在 SQL Server 中,限制條件名稱在資料表所屬的結構描述中必須是唯一的。不過,在 Babelfish 中,這僅適用於 PRIMARY KEY 和 UNIQUE 限制條件。其他類型的限制條件不受此限制。

限制條件

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

條件限制搭配 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 資料欄支援資料類型 tinyint、smallint、int、bigint、numeric 及 decimal。

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

PostgreSQL 在 IDENTITY 資料欄中支援資料類型 numeric 和 decimal 精確到 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 物件

支援 LOGIN 物件的所有選項,以下除外:PASSWORD、DEFAULT_DATABASE、DEFAULT_LANGUAGE、ENABLE,DISABLE。

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 關鍵字 CLUSTERED 和 NONCLUSTERED

Babelfish 接受和忽略 CLUSTERED 和 NONCLUSTERED 關鍵字。

sysdatabases.cmptlevel

sysdatabases.cmptlevel 一律設定為 120。

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

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

TEXTIMAGE_ON filegroup

Babelfish 會忽略 TEXTIMAGE_ON filegroup 子句。

時間精確度

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

交易隔離層級

READUNCOMMITTED 和 READCOMMITTED 視為相同。

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

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

沒有 SCHEMABINDING 子句

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