简单的问题 - 为什么当我@len
在下面的查询中打印变量的值时,我会得到值 1,而不是 12(指定字符串中的字符数)?
DECLARE @string varchar
DECLARE @index int
DECLARE @len int
DECLARE @char char(1)
SET @string = 'content loop'
SET @index = 1
SET @len= LEN(@string)
print @len
简单的问题 - 为什么当我@len
在下面的查询中打印变量的值时,我会得到值 1,而不是 12(指定字符串中的字符数)?
DECLARE @string varchar
DECLARE @index int
DECLARE @len int
DECLARE @char char(1)
SET @string = 'content loop'
SET @index = 1
SET @len= LEN(@string)
print @len
你的声明@string
是错误的。你没有长度varchar
。
尝试这个:
declare @string varchar(255); -- or whatever
您刚刚了解到这种情况下的默认值为 1。
这在文档中有明确规定。进一步说明,MS SQL 似乎使这变得相当复杂:
在数据定义或变量声明语句中未指定 n 时,默认长度为 1。使用 CAST 和 CONVERT 函数时未指定 n 时,默认长度为 30。
正确的习惯是在使用varchar
or时始终包含长度nvarchar
。
您需要给变量@string 一个实际长度。打印变量@string,它可能会返回'C'。
没有长度规范的BecvausevarChar
被视为varChar(1)
替换varchar
为varChar(30)
或varChar(max)