在一列中存储超过 8000 个字节

Moh*_*eth 2 sql-server-2008 sql-server datatypes

我的 SQL Server 数据库中的一个表中有一个列,该列可以超过 8000 个字符。由于 SQL Server 中一列的最大允许字符长度为 8000,如何存储超过 8000 个字符的数据?

Pau*_*ite 7

如果要在 SQL Server 的单个列中存储大于 8000 字节的值,需要考虑两件事。

首先,列必须能够保存这个长度的值。对于字符串,这通常通过为列指定类型varchar(max)(对于单字节字符)或nvarchar(max)(对于 Unicode)来完成。例如,下表变量的列中允许超过 8000 字节的字符串:

DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);
Run Code Online (Sandbox Code Playgroud)

其次,您必须确保您尝试存储在此列中的任何值也键入为 eg varchar(max)。例如,以下结果会导致截断,因为构造的字符串被隐式键入为 varchar(而不是 varchar(max)),因此限制为 8000 字节:

DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);

INSERT @Example
    (LongColumn)
VALUES
    (REPLICATE('x', 9000)); -- 'x' is implicitly varchar

SELECT 
    E.LongColumn, 
    DATALENGTH(E.LongColumn)
FROM @Example AS E;
Run Code Online (Sandbox Code Playgroud)

以下代码可以正常工作,因为它构造了一个类型为 的字符串varchar(max)

DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);

INSERT @Example
    (LongColumn)
VALUES
    (REPLICATE(CONVERT(varchar(max), 'x'), 9000));

SELECT 
    E.LongColumn, 
    DATALENGTH(E.LongColumn)
FROM @Example AS E;
Run Code Online (Sandbox Code Playgroud)

请参见联机丛书中的char 和 varchar以及nchar 和 nvarchar