2013-05-17 30 views
4

我有2个输入参数,我想搜索用户,其中用户名的一部分是@Username,部分名称是@Name,该用户名部分是@Username,部分名称是@Name在存储过程中使用LIKE与输入参数

SELECT * 
FROM tbl_answer 
WHERE 
    an_del = 0 
    AND u_username = ISNULL(LIKE %@Username%, u_username) OR 
     u_name = ISNULL(LIKE @Name, u_name) 

我怎么可以在这个存储过程使用LIKE

+3

*** ***什么数据库系统是本作? SQL只是**许多**数据库系统使用的查询语言 - 它们是哪一个? MySQL的? Postgres的? SQL Server?甲骨文? IBM DB2?完全不同的东西? –

回答

3
CREATE PROC dbo.SearchAnswers 
@Username nvarchar(20), 
@Name nvarchar(20) 
AS 
SELECT * 
FROM tbl_answer 
WHERE an_del=0 and u_username LIKE '%' + ISNULL(@Username, u_username) + '%' 
    OR u_name LIKE ISNULL(@Name, u_name) 

Example for a SQLServer2008

+0

查找[link] http://sqlfiddle.com/#!3/95d2a/1并运行此示例的示例不返回任何数据 –

+1

如果从具有从用户接收的参数的Web应用程序调用过程,则上面的串联的SQL语句会使其容易受到SQL注入的影响。 Erlang Sommarskog(MS SQL MVP)建议使用内置过程sp_executesql来正确封装参数。 http://www.sommarskog.se/dynamic_sql.html#sp_executesql –

1

你需要使用动态SQL,例如SQL服务器:

create procedure MyProc 
(
    @Username varchar(30), 
    @Name varchar(30) 
) 
as 
begin 
    exec ('SELECT * from tbl_answer where an_del=0 and 
      u_username=isnull(like ''%'[email protected]+'%'',u_username) 
      or u_name=isnull(like '''[email protected]+''',u_name)') 
end 
相关问题