使用2个输入参数在sql中搜索

使用2个输入参数在sql中搜索,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有2个输入参数,我想用这些参数进行搜索 CREATE TABLE dbo.tbl_answer ( an_del INT, u_username NVARCHAR(50), u_name NVARCHAR(50) null ) INSERT dbo.tbl_answer VALUES(1, 'mohammad', null), (1, 'A13A6C533AF77160FBF2862953FA4530', 'GCV'), (1, 'C', 'GG'), (0, 'AB',

我有2个输入参数,我想用这些参数进行搜索

 CREATE TABLE dbo.tbl_answer
 (
  an_del INT,
  u_username NVARCHAR(50),
  u_name NVARCHAR(50) null
  )

INSERT dbo.tbl_answer
VALUES(1, 'mohammad', null), (1, 'A13A6C533AF77160FBF2862953FA4530', 'GCV'), (1, 'C', 'GG'), (0, 'AB', 'BB'), (1, 'AC', 'K')
GO

CREATE PROC dbo.SearchAnswers
@Username nvarchar(20),
@Name nvarchar(20)
AS
SELECT *  
FROM dbo.tbl_answer
WHERE an_del = 1 AND u_username LIKE ISNULL('%' + @Username + '%', u_username)
  and u_name LIKE  ISNULL('%' + @Name + '%', u_name)
我运行这个命令
EXEC dbo.SearchAnswers'moha',null
,但返回任何数据

试试这个:

CREATE PROC dbo.Answers
@Username nvarchar(20),
@Name nvarchar(20)
AS

declare  @Name2 nvarchar(20)
set @Name2 = ISNULL(@Name, '00')

SELECT *  
FROM dbo.tbl_answer
WHERE an_del = 1 AND ( u_username LIKE ISNULL('%' + @Username + '%', u_username)
  AND  
ISNULL(u_name,'00') LIKE  '%' + @Name2 + '%' )

在这里搜索两个字段
username
name
,输入参数为
null

类似于
将不适用于null,因此您必须独立检查null,或者为此添加一些补充项

CREATE PROC dbo.SearchAnswers
@Username nvarchar(20),
@Name nvarchar(20)
AS

declare  @Name2 nvarchar(20)
set @Name2 = ISNULL(@Name, '00')

SELECT *  
FROM dbo.tbl_answer
WHERE an_del = 1 AND ( u_username LIKE ISNULL('%' + @Username + '%', u_username)
  AND  
ISNULL(u_name,'00') LIKE  '%' + @Name2 + '%' )

您的问题是您不允许表中的
u\u name
为空。这是唯一一个包含“moha”的
u_用户名的记录

还可以对NULL进行第三个条件显式性测试

AND ( (u_name is null) or (u_name LIKE ISNULL('%' + @Name + '%', u_name) )

如果你对我的ANS满意,那么UpvoTo我会考虑添加一些叙述来解释为什么这个代码起作用,是什么使它成为问题的答案?这对提出问题的人和其他任何人都非常有帮助。
AND ( (u_name is null) or (u_name LIKE ISNULL('%' + @Name + '%', u_name) )