Tsql 为什么t-sql patindex不能与声明的变量一起工作?

Tsql 为什么t-sql patindex不能与声明的变量一起工作?,tsql,Tsql,为什么此查询无法正常工作 declare @s nvarchar set @s = 'abcd' select patindex('%b%', @s) 它是返回零。如果您在varchar的初始声明中添加一个大小,它就会工作: declare @s nvarchar(10) set @s = 'abcd' select patindex('%b%', @s) 如果您在varchar的初始声明中添加了一个大小,则它会起作用: declare @s nvarchar(10) set @s

为什么此查询无法正常工作

declare @s nvarchar
set @s = 'abcd'
select patindex('%b%', @s)

它是返回零。

如果您在varchar的初始声明中添加一个大小,它就会工作:

declare @s nvarchar(10) 
set @s = 'abcd' 
select patindex('%b%', @s) 

如果您在varchar的初始声明中添加了一个大小,则它会起作用:

declare @s nvarchar(10) 
set @s = 'abcd' 
select patindex('%b%', @s) 

这是因为如果不定义NVARCHAR变量的大小,它将默认为大小1。因此@s将只包含“a”

您需要始终小心,以确保明确定义大小,因为不同的场景的行为不同

所以,只要改变

DECLARE @s NVARCHAR
到(例如)


这是因为如果不定义NVARCHAR变量的大小,它将默认为大小1。因此@s将只包含“a”

您需要始终小心,以确保明确定义大小,因为不同的场景的行为不同

所以,只要改变

DECLARE @s NVARCHAR
到(例如)


我接受每一个有用的问题我接受每一个有用的问题+1-打败我!无论如何都会保留我的答案,因为它的指针指向类似的相关gotchas+1上的引用-比我快!无论如何,我都会保留我的答案,因为它指向类似的相关gotchas的引用