像运算符不在存储过程中工作

Abh*_*hek -1 sql-server stored-procedures

我创建了一个存储过程,我在其中为我的语句创建动态查询.但是我不知道我在存储过程的动态查询部分做了什么错误,我正在使用LIKE运算符.下面是我的存储过程

CREATE PROCEDURE usptestSearchEmployee 
@Name varchar(50)= null,
@EmpNumber varchar(50)=null,
@Location Varchar(50)=null,
@position varchar(50)=null,
@partialmatch bit ,
@partialmatch2 bit,
@partialmatch3 bit 

AS
BEGIN

declare @wheresql varchar(max)
if (@Name is not null)
BEGIN
if(@partialmatch=1)
 set @wheresql=' where EmpName like ''%'' '+  @Name 
else
  set @wheresql=' where EmpName = '+@Name
END
PRINT @wheresql
set @wheresql='select * from employee ' +@wheresql
  select @wheresql
END
Run Code Online (Sandbox Code Playgroud)

存储过程中的查询是这样创建的select * from employee where EmpName like '%' oo ,我在做错误.问候

Jam*_*iec 5

A like应该如下所示:select * from employee where EmpName like '%oo'

所以改变这一行:

set @wheresql=' where EmpName like ''%'' '+  @Name 
Run Code Online (Sandbox Code Playgroud)

set @wheresql=' where EmpName like ''%'+  @Name + ''''
Run Code Online (Sandbox Code Playgroud)

正如@IanNelson所指出的那样,你也试图将SELECT关键字与包含sql的字符串一起使用.你需要使用其中之一EXEC

EXEC(@wheresql)
Run Code Online (Sandbox Code Playgroud)

要么 sp_executesql

sp_executesql @wheresql
Run Code Online (Sandbox Code Playgroud)