首页 > 解决方案 > DATALENGTH() 适用于文字,但不适用于变量

问题描述

查询返回 10(这select datalength(cast('12345' as nvarchar))没关系),但是

declare @string as nvarchar
set @string = cast('12345' as nvarchar)
select datalength(@string)

返回 2 而不是 10。为什么?如何使用 DATALENGHT() 来确定存储在变量中的字符串的数据长度?

标签: sql-serversql-server-2017

解决方案


始终指定n字符数据的长度。例如

declare @string as nvarchar(30)
set @string = cast('12345' as nvarchar(30))
select datalength(@string)

如果您不这样做,则文档中描述了该行为:

当在数据定义或变量声明语句中未指定 n 时,默认长度为 1。当未使用 CAST 函数指定 n 时,默认长度为 30。

nchar 和 nvarchar


推荐阅读