结果集列返回超过 4000 个字符的 MS SQL 问题

问题描述

select top 500 ID,(DATA1+DATA2) as DATA 
from TABLE1 

DATA1 有 3000 个字符,DATA2 有 4000 个字符

预期输出 DATA1+DATA2 = 7000 个字符

当前结果是 DATA1+DATA2 = 4000 个字符

解决方法

最有可能的罪魁祸首是您的字段的数据类型。您很可能将 NVARCHAR(4000) 作为类型,它会截断 4000 个字符后的任何内容。您需要使用 NVARCHAR(MAX) 来获得所需的输出。这可以在表级别或通过强制转换来完成

DECLARE @table TABLE (
ID int,DATA1 NVARCHAR(4000),DATA2 NVARCHAR(4000),DATA3 NVARCHAR(MAX),DATA4 NVARCHAR(MAX)
)


INSERT INTO @table
values 
(1,REPLICATE('X',4000),3000),3000))

SELECT 
LEN(DATA1 + DATA2),-- will be not 7000 due to 4000 char limit
LEN(CAST(DATA1 AS NVARCHAR(MAX)) + CAST(DATA2 AS NVARCHAR(MAX))),-- will be 7000 due to new type
LEN(DATA3 + DATA4) -- will be 7000 due to fields already have the max type
FROM @table