Sql server SQL server使用";如果是类似变量的模式;

Sql server SQL server使用";如果是类似变量的模式;,sql-server,Sql Server,为什么这不起作用 DECLARE @str varchar = '######' IF @str LIKE '%###%' SELECT 1 DECLARE @Comment nvarchar(255) = '[A-B-C-D]' IF @Comment LIKE '%[%-%-%-%]%' SELECT 1 但这是有效的 IF '######' LIKE '%###%' SELECT 1 DECLARE @Comment varchar(255) = '[A-B-C-D]' IF

为什么这不起作用

DECLARE @str varchar = '######'

IF @str LIKE '%###%' SELECT 1
DECLARE @Comment nvarchar(255) = '[A-B-C-D]'

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1
但这是有效的

IF '######' LIKE '%###%' SELECT 1
DECLARE @Comment varchar(255) = '[A-B-C-D]'

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1
更新

为什么会这样

IF '######' LIKE '%###%' SELECT 1
DECLARE @Comment varchar(255) = '[A-B-C-D]'

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1
但是这不起作用

DECLARE @str varchar = '######'

IF @str LIKE '%###%' SELECT 1
DECLARE @Comment nvarchar(255) = '[A-B-C-D]'

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1

添加到变量类型长度

DECLARE @str varchar = '######'

IF @str LIKE '%###%' SELECT 1
与相同(隐式强制转换将其更改为“#”)

这将有助于:

DECLARE @str varchar(20) = '######'

IF @str LIKE '%###%' SELECT 1

尝试声明varchar的大小

DECLARE @str varchar(50) = '######'

SELECT 1 WHERE  @str LIKE '%###%'

如果您不使用specify type length,它将使用最小代码页长度。这包括varchar 1和nvarchar 2。所以,实际上,如果作用域正常工作

DECLARE @str varchar = '######'
SELECT  DATALENGTH(@str) 

DECLARE @str1 varchar(20) = '######'
select DATALENGTH(@str1) 

DECLARE @str3 nvarchar = '######'
SELECT  DATALENGTH(@str3) 

DECLARE @str4 nvarchar(20) = '######'
select DATALENGTH(@str4) 

关于您的编辑,请参见,虽然您的代码可能会作为答案进行更正,但详细说明您的代码的作用,它可以提高您答案的质量。签出文章:谢谢@LuFFy,我现在正在修复。