0

在 SQL Server 中,nvarchar占用的空间是 的两倍varchar,其页前指针限制为 4000 与varchar的 8000 相比。

那么,为什么下面的like比较会String or binary data would be truncated.出错......

select 1 where '' like cast(replicate('x', 4001) as nvarchar(max))

......而铸造成一个更大varchar的不是吗?

select 1 where '' like cast(replicate('x', 123456) as varchar(max))

事实上,当 top live明确声明其大小限制约为 2GB时,为什么会出现截断错误?nvarchar(max)

4

1 回答 1

1

从运营商的描述来看LIKE

图案

是要在 match_expression 中搜索的特定字符串,并且可以包含以下有效的通配符。模式 最多可以是 8,000 字节

此查询显示符号的实际计数:

select  len(replicate('x', 123456)) as  CntVarchar,
        len(replicate('x', 4001))   as  CntNVarchar


+------------+-------------+
| CntVarchar | CntNVarchar |
+------------+-------------+
|       8000 |        4001 |
+------------+-------------+

第一种情况有 8000 个字节。第二个有 8002 字节,这违反了“最多可以是 8,000 字节”的规则。

于 2020-01-04T21:07:28.297 回答