我想知道是否有人可以解释这种行为?
DECLARE @RandomParam1 NVARCHAR
DECLARE @RandomParam2 NVARCHAR
DECLARE @RandomParam3 NVARCHAR
SET @RandomParam1 = '0HelloWorld'
SET @RandomParam2 = '9HelloWorld'
SET @RandomParam3 = '15HelloWorld'
select 1 where '0' = @RandomParam1 -- true
select 1 where '0' = '0HelloWorld' -- false
select 1 where '9' = @RandomParam2 -- true
select 1 where '15' = @RandomParam3 -- false
为什么与参数进行字符串比较会产生与没有参数不同的结果?为什么声称'0'='0whatever'?
我知道参数可能会尝试将其作为数字进行比较,但最后一个例子应该是真的。
有什么想法吗?
答案 0 :(得分:9)
NVARCHAR
的默认长度为1.您的三个参数实际上只包含一个字符。
如果您将声明更改为
DECLARE @RandomParam1 NVARCHAR(32)
DECLARE @RandomParam2 NVARCHAR(32)
DECLARE @RandomParam3 NVARCHAR(32)
你会得到你期待的行为。
在数据定义或变量声明中未指定n时 声明,默认长度为1。
答案 1 :(得分:2)
您没有为变量指定长度,因此默认长度为1。
DECLARE @RandomParam1 NVARCHAR(20)
DECLARE @RandomParam2 NVARCHAR(20)
DECLARE @RandomParam3 NVARCHAR(20)
为您的变量添加了LENGTH
。