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

时间:2014-01-02 10:51:43

标签: 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

存储过程中的查询正在创建这样的select * from employee where EmpName like '%' oo我犯了错误。 此致

3 个答案:

答案 0 :(得分:5)

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

所以改变这一行:

set @wheresql=' where EmpName like ''%'' '+  @Name 

set @wheresql=' where EmpName like ''%'+  @Name + ''''

正如@IanNelson指出的那样,你也错误地尝试将SELECT关键字与包含sql的字符串一起使用。您需要使用EXEC

EXEC(@wheresql)

sp_executesql

sp_executesql @wheresql

答案 1 :(得分:2)

除了@jamiec指出的变化之外,我认为你还需要

EXEC(@wheresql)

而不是

SELECT @wheresql

http://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/

答案 2 :(得分:1)

您的查询中有 未闭合的引号 。试试如下。

更改以下查询

发件人

 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

if(@partialmatch=1)
 set @wheresql=' where EmpName like ''%'+  @Name + ''''
else
  set @wheresql=' where EmpName = ''' + @Name + +''''
END
PRINT @wheresql
set @wheresql='select * from employee ' +@wheresql
EXEC(@wheresql)