内存中 OLTP 支持的数据类型

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

本文列出了内存中 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 开始:

  • 单个内存优化表还可以具有多个长列(如 nvarchar(4000)),即使其长度之和大于物理行大小(即 8060 字节)也没有关系。

  • 内存优化表可以具有数据类型的最长字符串和二进制列,例如 varchar(max)

标识 LOB 和其他行外列

自 SQL Server 2016 起,内存优化表支持行外列,即允许一个表行大于 8060 个字节。 以下 Transact-SQL SELECT 语句报告了内存优化表中的所有行外列。 请注意:

  • 所有索引键列均存储于行内。
    • 现在,允许在内存优化表上的非唯一索引键中包含可为 NULL 的列。
    • 可以在内存优化表上将索引声明为 UNIQUE。
  • 所有 LOB 列存储在行外。
  • -1 的 max_length 表示大型对象 (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;

其他数据类型

其他类型 详细信息
表类型 内存优化表变量

另请参阅

对内存中 OLTP 的 Transact-SQL 支持
在内存优化的表中实现 SQL_VARIANT
内存优化表中的表和行大小