问题描述
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