インメモリ OLTP に対してサポートされるデータ型

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

この記事では、次のインメモリ OLTP 機能でサポートされていないデータ型の一覧を示します。

  • メモリ最適化テーブル

  • ネイティブ コンパイル T-SQL モジュール

サポートされていないデータ型

次のデータ型はサポートされません。

サポートされる重要なデータ型

インメモリ OLTP の機能では、ほとんどのデータ型がサポートされています。 次のデータ型は特に重要です。

文字列型とバイナリ型 詳細情報
binary と varbinary* binary と varbinary (Transact-SQL)
char と varchar* char および varchar (Transact-SQL)
nchar と nvarchar* nchar および nvarchar (Transact-SQL)

上記の文字列データ型とバイナリ データ型については、SQL Server 2016 以降は次のようになります。

  • 個々のメモリ最適化テーブルには、それらの長さが 8,060 バイトの物理行サイズを超えることがあっても、 nvarchar(4000)などの複数の長い列が含まれている場合があります。

  • メモリ最適化テーブルには、 varchar(max)などのデータ型の最大長の文字列やバイナリ列がある場合があります。

行外の LOB 列およびその他の列の特定

SQL Server 2016 以降では、メモリ最適化テーブルが行外の列をサポートするため、1 つのテーブルの行を 8060 バイトよりも大きくすることができます。 次の Transact-SQL SELECT ステートメントにより、メモリ最適化テーブルの行外のすべての列のレポートが生成されます。 以下の点に注意してください。

  • インデックス キー列はすべて行内に格納されます。
    • メモリ最適化テーブルでは、一意ではないインデックス キーが、NULL 値を許容する列を含むことができるようになりました。
    • メモリ最適化テーブルでは、インデックスを UNIQUE として宣言できます。
  • すべての LOB 列は行外に格納されます。
  • max_length の -1 は、ラージ オブジェクト (LOB) 列を表します。
SELECT
        OBJECT_NAME(m.object_id) as [table],
        c.name                   as [column],
        c.max_length
    FROM
             sys.memory_optimized_tables_internal_attributes AS m
        JOIN sys.columns                                     AS c
                ON  m.object_id = c.object_id
                AND m.minor_id  = c.column_id
    WHERE
        m.type = 5;

その他のデータ型

その他の型 詳細情報
テーブル型 メモリ最適化テーブル変数

参照

Transact-SQL によるインメモリ OLTP のサポート
メモリ最適化テーブルへの SQL_VARIANT の実装
メモリ最適化テーブルのテーブルと行のサイズ