我创建了一个存储过程,在其中我为我的语句创建了一个动态查询。但是我不知道我在存储过程的动态查询部分做了什么错误,我正在使用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
我犯了错误。
此致
答案 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 @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)