インメモリ OLTP に対してサポートされるデータ型Supported Data Types for In-Memory OLTP

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

この記事では、次のインメモリ OLTP 機能でサポートされていないデータ型の一覧を示します。This article lists the data types that are unsupported for the In-Memory OLTP features of:

  • メモリ最適化テーブルMemory-optimized tables

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

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

次のデータ型はサポートされません。The following data types are not supported:

datetimeoffset (Transact-SQL)datetimeoffset (Transact-SQL) geography (Transact-SQL)geography (Transact-SQL) geometry (Transact-SQL)geometry (Transact-SQL)
hierarchyid (Transact-SQL)hierarchyid (Transact-SQL) rowversion (Transact-SQL)rowversion (Transact-SQL) xml (Transact-SQL)xml (Transact-SQL)
sql_variant (Transact-SQL)sql_variant (Transact-SQL) ユーザー定義型User-Defined Types .

サポートされる重要なデータ型Notable Supported Data Types

インメモリ OLTP の機能では、ほとんどのデータ型がサポートされています。Most data types are supported by the features of In-Memory OLTP. 次のデータ型は特に重要です。The following few are worth noting explicitly:

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

上記の文字列データ型とバイナリ データ型については、SQL Server 2016 以降は次のようになります。For the preceding string and binary data types, starting with SQL Server 2016:

  • 個々のメモリ最適化テーブルには、それらの長さが 8,060 バイトの物理行サイズを超えることがあっても、 nvarchar(4000)などの複数の長い列が含まれている場合があります。An individual memory-optimized table can also have several long columns such as nvarchar(4000), even though their lengths would add to more than the physical row size of 8060 bytes.

  • メモリ最適化テーブルには、 varchar(max)などのデータ型の最大長の文字列やバイナリ列がある場合があります。A memory-optimized table can have max length string and binary columns of data types such as varchar(max).

行外の LOB 列およびその他の列の特定Identify LOBs and other columns that are off-row

SQL Server 2016 以降では、メモリ最適化テーブルが行外の列をサポートするため、1 つのテーブルの行を 8060 バイトよりも大きくすることができます。Starting with SQL Server 2016, memory-optimized tables support off-row columns, which allow a single table row to be larger than 8060 bytes. 次の Transact-SQL SELECT ステートメントにより、メモリ最適化テーブルの行外のすべての列のレポートが生成されます。The following Transact-SQL SELECT statement reports all columns that are off-row, for memory-optimized tables. 以下の点に注意してください。Note that:

  • インデックス キー列はすべて行内に格納されます。All index key columns are stored in-row.
    • メモリ最適化テーブルでは、一意ではないインデックス キーが、NULL 値を許容する列を含むことができるようになりました。Nonunique index keys can now include NULLable columns, on memory-optimized tables.
    • メモリ最適化テーブルでは、インデックスを UNIQUE として宣言できます。Indexes can be declared as UNIQUE on a memory-optimized table.
  • すべての LOB 列は行外に格納されます。All LOB columns are stored off-row.
  • max_length の -1 は、ラージ オブジェクト (LOB) 列を表します。A max_length of -1 indicates a large object (LOB) column.
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;

その他のデータ型Other Data Types

その他の型Other Types 詳細情報For more information
テーブル型table types メモリ最適化テーブル変数Memory-Optimized Table Variables

参照See Also

Transact-SQL によるインメモリ OLTP のサポート Transact-SQL Support for In-Memory OLTP
メモリ最適化テーブルへの SQL_VARIANT の実装Implementing SQL_VARIANT in a Memory-Optimized Table
メモリ最適化テーブルのテーブルと行のサイズTable and Row size in Memory-Optimized Table