

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

# Babelfish 中的 T-SQL 差異
<a name="babelfish-compatibility.tsql.limitations"></a>

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

如需各種版本的支援詳情，請參閱 [Babelfish 各版本支援的功能](babelfish-compatibility.supported-functionality-table.md)。如需目前不支援的功能詳情，請參閱 [Babelfish 中不支援的功能](babelfish-compatibility.tsql.limitations-unsupported.md)。

Babelfish 可與 Aurora PostgreSQL 相容版本一起使用。如需 Babelfish 版本的更多資訊，請參閱 [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/Welcome.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/Welcome.html)。


| 功能或語法 | 行為或差異的描述 | 
| --- | --- | 
| \$1 (行連續字元) | 目前不支援字元和十六進位字串的行延續字元 (換行之前的反斜線)。針對字元字串，反斜線換行會被解讀為字串中的字元。針對十六進位字串，反斜槓換行會導致語法錯誤。 | 
| @@version | `@@version` 傳回的值與 SQL Server 傳回的值格式略有不同。依賴 `@@version` 格式的程式碼可能無法正常運作。 | 
| 彙總函數 | 支援部分彙總函數 (支援 AVG、COUNT、COUNT\$1BIG、GROUPING、MAX、MIN、STRING\$1AGG 和 SUM)。如需不支援的彙總函數清單，請參閱 [不支援的函數](babelfish-compatibility.tsql.limitations-unsupported.md#babelfish-compatibility.tsql.limitations-unsupported-list4)。 | 
|  ALTER TABLE  | 僅支援新增或捨棄單個資料欄或限制。 | 
|  ALTER TABLE..ALTER COLUMN  | 目前無法指定 NULL 和 NOT NULL。若要變更資料欄的可 null 性，請使用 PostgreSQL 陳述式 ALTER TABLE..\$1SET\$1DROP\$1 NOT NULL。 | 
|  AT TIME ZONE  | 從日光節約時間 (DST) 轉換到標準時間期間，系統會使用標準時間偏移顯示重疊期間。為釐清此點，請思考下列範例： <pre>SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time';<br />GO;<br />Result: 2022-10-30 02:00:00 +01:00</pre>  | 
| 沒有資料欄別名的空白資料欄名稱 | `sqlcmd` 和 `psql` 公用程式以不同方式處理名稱空白的資料欄： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/babelfish-compatibility.tsql.limitations.html)  | 
| CHECKSUM 函數 | Babelfish 和 SQL 伺服器將不同的雜湊演算法使用於 CHECKSUM 函數。其結果是，由 Babelfish 中的 CHECKSUM 函數產生的雜湊值可能與 SQL Server 中的 CHECKSUM 函數產生的雜湊值不同。 | 
| 資料欄預設 | 建立資料欄預設時會忽略限制條件名稱。若要捨棄資料欄預設，請使用下列語法：`ALTER TABLE...ALTER COLUMN..DROP DEFAULT...` | 
| Constraint\$1name | 在 SQL Server 中，限制條件名稱在資料表所屬的結構描述中必須是唯一的。不過，在 Babelfish 中，這僅適用於 PRIMARY KEY 和 UNIQUE 限制條件。其他類型的限制條件不受此限制。 | 
| 限制條件 | PostgreSQL 不支援啟用和停用個別限制條件。陳述式會被忽略，並發出警告。 | 
| 條件限制搭配 IGNORE\$1DUP\$1KEY | 建立的條件限制沒有此內容。 | 
| CREATE、ALTER、DROP SERVER ROLE |  ALTER SERVER ROLE 僅支援 `sysadmin`。不支援其他所有語法。 Babelfish 中的 T-SQL 使用者，可體驗類似 SQL Server 的登入 (伺服器主體)、資料庫和資料庫使用者 (資料庫主體) 等概念。  | 
| CREATE、ALTER LOGIN 子句支援的語法有限 | CREATE LOGIN... 支援 PASSWORD 子句、...DEFAULT\$1DATABASE 子句及 ...DEFAULT\$1LANGUAGE 子句。ALTER LOGIN... 支援 PASSWORD 子句，而不是 ALTER LOGIN... 不支援 OLD\$1PASSWORD 子句。只有以 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\$1DUP\$1KEY | 如果語法建立的索引包含 INNORE\$1DUP\$1KEY，則視為省略此內容來建立索引。 | 
| 超過 32 個資料欄的索引 | 索引不能包含超過 32 個資料欄。在 PostgreSQL 中，包含的索引資料欄計入上限，但在 SQL Server 中不會這樣。 | 
| 索引 (叢集化) | 視為已指定 NONCLUSTERED 來建立叢集索引。 | 
| 索引子句 | 忽略下列子句：FILLFACTOR、ALLOW\$1PAGE\$1LOCKS、ALLOW\$1ROW\$1LOCKS、PAD\$1INDEX、STATISTICS\$1NORECOMPUTE、OPTIMIZE\$1FOR\$1SEQUENTIAL\$1KEY、SORT\$1IN\$1TEMPDB、DROP\$1EXISTING、ONLINE、COMPRESSION\$1DELAY、MAXDOP 和 DATA\$1COMPRESSION | 
| JSON 支援 |  不能保證名稱-值對的順序。但是陣列類型仍然不受影響。 | 
| LOGIN 物件 | 支援 LOGIN 物件的所有選項，以下除外：PASSWORD、DEFAULT\$1DATABASE、DEFAULT\$1LANGUAGE、ENABLE，DISABLE。 | 
| NEWSEQUENTIALID 函數 | 實作成 NEWID；不保證循序行為。呼叫 `NEWSEQUENTIALID` 時，PostgreSQL 會產生新的 GUID 值。 | 
| 支援 OUTPUT 子句，但有以下限制 | 不支援同一個 DML 查詢中有 OUTPUT 和 OUTPUT INTO。不支援 OUTPUT 子句中的 UPDATE 或 DELETE 操作參考非目標資料表。OUTPUT... 不支援同一個查詢中有 DELETED \$1、INSERTED \$1。 | 
| 程序或函數參數限制 | 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\$1owner 除外的資料庫層級角色。 | 
| SQL 關鍵字 SPARSE | 接受和忽略關鍵字 SPARSE。 | 
| SQL 關鍵字子句 `ON filegroup` | 目前忽略此子句。 | 
| 索引和限制條件的 SQL 關鍵字 `CLUSTERED` 和 `NONCLUSTERED` | Babelfish 接受和忽略 `CLUSTERED` 和 `NONCLUSTERED` 關鍵字。 | 
| `sysdatabases.cmptlevel` | `sysdatabases.cmptlevel` 一律設定為 120。 | 
| 重新啟動時不會重新初始化 tempdb | 資料庫重新啟動時，不會移除 tempdb 中建立的永久物件 (例如資料表和程序)。 | 
| TEXTIMAGE\$1ON filegroup | Babelfish 會忽略 `TEXTIMAGE_ON` *`filegroup`* 子句。 | 
| 時間精確度 | Babelfish 支援 6 位數精確度的小數秒。此行為尚無不良影響。 | 
| 交易隔離層級 | READUNCOMMITTED 和 READCOMMITTED 視為相同。 | 
| 虛擬計算資料欄 (非持久性) | 虛擬計算資料欄建立為持久性。 | 
| 沒有 SCHEMABINDING 子句 | 函數、程序、觸發程序或檢視表中不支援此子句。視為未指定 WITH SCHEMABINDING 來建立物件。 | 