Escape无法使用可选参数!

1 sql-server

在我使用LIKE运算符的可选参数查询中,Escape特殊字符不起作用.这是查询的一部分

NAME LIKE  CASE WHEN '%'+@Name+'%' IS NULL THEN NAME ELSE '%'+@Name+'%' END
Run Code Online (Sandbox Code Playgroud)

我以为我可以做到这一点

NAME LIKE CASE WHEN '%'+@Name+'%'ESCAPE '\' IS NULL THEN NAME ELSE '%'+@Name+'%' END
Run Code Online (Sandbox Code Playgroud)

但是当我添加转义'\'但它引发了一个错误.任何帮助?

演示代码:

 set @Name='Restaur\[ant'

      SELECT      [JOB].HOUSE_CODE,  [JOB].JOB_CODE,  [JOB].OPEN_DATE,  [JOB].NAME AS Position,  [JOB].DESCRIPTION,  [RESTAURANT].ZIP_CODE AS ZipCode, 
                           [STATE].STATE_NAME AS State,  [RESTAURANT].CITY_NAME AS City
    FROM          [JOB] INNER JOIN
                           [RESTAURANT] ON  [JOB].HOUSE_CODE =  [RESTAURANT].HOUSE_CODE INNER JOIN
                           [STATE] ON  [RESTAURANT].STATE_CODE =  [STATE].STATE_CODE INNER JOIN
                           [JOB_CODE] ON  [JOB].HOUSE_CODE =  [JOB_CODE].HOUSE_CODE AND  [JOB].JOB_CODE =  [JOB_CODE].JOB_CODE AND 
                           [RESTAURANT].HOUSE_CODE =  [JOB_CODE].HOUSE_CODE
    WHERE     (  [JOB].NAME LIKE  CASE WHEN '%'+@Name+'%' IS NULL THEN  [JOB].NAME ELSE '%'+@Name+'%' END ESCAPE '\' )
Run Code Online (Sandbox Code Playgroud)

Joe*_*lli 5

将ESCAPE放在CASE语句之外.此外,仅测试@Name为NULL就足够了.

NAME LIKE CASE WHEN @Name IS NULL THEN NAME ELSE '%'+@Name+'%' END ESCAPE `\` 
Run Code Online (Sandbox Code Playgroud)

编辑:这里有一些演示代码来说明这种技术.

declare @test table (
    name varchar(100)
)

insert into @test
    (name)
    select 'I am 100% confident this works.' union all
    select 'There can be no doubt.' union all
    select 'I would like to eat in fine restaur[ant some day.'

declare @name varchar(100)

/* Case when @name is NULL */
select name
    from @test
    where name like case when @name is null then name else '%'+@name+'%' end escape '\'

set @name = '100\%'

/* Case when @name has a value with a % */
select name
    from @test
    where name like case when @name is null then name else '%'+@name+'%' end escape '\'

set @name = 'restaur\[ant'

/* Case when @name has a value with a [ */
select name
    from @test
    where name like case when @name is null then name else '%'+@name+'%' end escape '\'
Run Code Online (Sandbox Code Playgroud)