

# 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)」を参照してください。


| 機能または構文 | 動作または違いの説明 | 
| --- | --- | 
| \\ (行継続文字) | 文字および 16 進数の文字列の行継続文字 (改行の前のバックスラッシュ) は現在サポートされていません。文字列の場合、バックスラッシュ改行は文字列内の文字として解釈されます。16 進数の文字列の場合、バックスラッシュ改行は構文エラーになります。 | 
| @@バージョン | `@@version` によって返される値の形式は SQL Server によって返される値とは若干異なります。`@@version` のフォーマットによっては、コードが正しく動作しないことがあります。 | 
| 集計関数 | 集計関数は部分的にサポートされています (AVG、COUNT、COUNT\_BIG、GROUPING、MAX、MIN、STRING\_AGG、SUM がサポートされています)。サポートされていない集計関数のリストについては、[サポートされていない関数](babelfish-compatibility.tsql.limitations-unsupported.md#babelfish-compatibility.tsql.limitations-unsupported-list4) を参照してください。 | 
| ALTER TABLE | 単一の列または制約の追加または削除のみをサポートします。 | 
| ALTER TABLE..ALTER COLUMN | NULL と NOT NULL は現在指定できません。カラムのヌル可能性を変更するには、PostgreSQL ステートメント ALTER TABLE..{SET\|DROP} 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/ja_jp/AmazonRDS/latest/AuroraUserGuide/babelfish-compatibility.tsql.limitations.html) | 
| CHECKSUM 関数 | Babelfish と SQL Server は CHECKSUM 関数で異なるハッシュアルゴリズムを使用しています。その結果、Babelfish の CHECKSUM 関数によって生成されるハッシュ値は、SQL Server の CHECKSUM 関数によって生成されるハッシュ値と異なる場合があります。 | 
| 列のデフォルト | 列のデフォルトを作成する場合、制約名は無視されます。列のデフォルトを削除するには、次の構文を使用します: `ALTER TABLE...ALTER COLUMN..DROP DEFAULT...` | 
| Constraint\_name | SQL Server では、テーブルが属するスキーマ内で制約名を一意にする必要があります。ただし、Babelfish では、これは PRIMARY KEY と UNIQUE の制約にのみ適用されます。その他のタイプの制約は、この制限の対象ではありません。 | 
| 制約 | PostgreSQL は、個々の制約のオンとオフをサポートしていません。ステートメントは無視され、警告が表示されます。 | 
| IGNORE\_DUP\_KEY による制約 | 制約は、このプロパティなしで作成されます。 | 
| サーバーロールの作成、変更、削除 | ALTER SERVER ROLE は、`sysadmin` のみでサポートされています。その他の構文はサポートされていません。<br />Babelfish の T-SQL ユーザーは、ログイン (サーバープリンシパル)、データベース、およびデータベースユーザー (データベースプリンシパル) の概念について、SQL Server と類似の経験をします。 | 
| CREATE、ALTER LOGIN 句は、限定された構文でサポートされています | ログイン作成..。パスワード句、...DEFAULT\_DATABASE 句、および ...DEFAULT\_LANGUAGE 句がサポートされています。ログイン変更..。PASSWORD 句はサポートされていますが、ALTER LOGIN..。OLD\_PASSWORD 句はサポートされていません。パスワードを変更できるのは、sysadmin メンバーのログインのみです。 | 
| 大文字と小文字を区別する照合順序を作成  | CREATE DATABASE ステートメントでは、大文字と小文字を区別する照合はサポートされていません。 | 
| CREATE DATABASE キーワードと句 | COLLATE および CONTAINMENT=NONE 以外のオプションはサポートされていません。COLLATE 句は受け入れられ、常に `babelfishpg_tsql.server_collation_name` の値に設定されます。 | 
| CREATE SCHEMA... サポート句 | CREATE SCHEMA コマンドを使用して、空のスキーマを作成できます。追加のコマンドを使用して、スキーマオブジェクトを作成します。 | 
| データベース ID の値は Babelfish で異なります | マスターデータベースと tempdb データベースは、データベース ID 1 および 2 にはなりません。 | 
| FORMAT 日付型関数は、次の制限付きでサポートされています | 1 文字の午前/午後はサポートされていません。<br />SQL サーバーでは、「yyy」形式は、1000 年を超える年では 4 桁を返しますが、それ以外の場合は 3 桁しか返しません。<br />「g」および「R」形式はサポートされていません<br />「Vi-VN」ロケールの翻訳は少し異なります。 | 
| 63 文字を超える識別子 | PostgreSQL は、最大 63 文字の識別子をサポートしています。Babelfish は 63 文字を超える識別子を、元の名前のハッシュを含んだ名前に変換します。例えば、「AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890」として作成された表は、「ABC123456789012345678901234567890123456789012345678901234567890」に変換される可能性があります。 | 
| IDENTITY 列のサポート | IDENTITY 列は tinyint、smallint、int、bigint、numeric、 およびdecimal のデータ型でサポートされています。SQL Server は、IDENTITY 列で `numeric` と `decimal` のデータ型の精度を 38 か所までサポートしています。<br />PostgreSQL Server は、IDENTITY 列で `numeric` と `decimal` のデータ型の精度を 19 か所までサポートしています。 | 
| 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 オブジェクト | PASSWORD、DEFAULT\_DATABASE、DEFAULT\_LANGUAGE、ENABLE、DISABLE を除く 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 のデータ型でサポートされています。<br />Aurora PostgreSQL は、SEQUENCE 内の数値および小数点のデータ型の精度を 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 ファイルグループ | Babelfish は `TEXTIMAGE_ON` {{`filegroup`}} 句を無視します。 | 
| 時間精度 | Babelfish は 少数秒 で 6 桁の精度をサポートします。この動作では、悪影響は予想されません。 | 
| トランザクション分離レベル | READUNCOMMITTED は READCOMMITTED と同じように扱われます | 
| 仮想計算列 (非永続的) | 仮想計算列は永続として作成されます。 | 
| WITHOUT SCHEMABINDING 句 | この句は、関数、プロシージャ、トリガー、またはビューでサポートされていません。オブジェクトは作成されますが、WITH SCHEMABINDING が指定されているかのようになります。 | 