2013-05-18 2 views
0

я имею 2 входной параметр и я хочу найти с этимпоиска в SQL с параметром 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 но возвращаю данные look at this

ответ

1

Попробуйте это:

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 + '%') 
+0

если вы удовлетворяете с моим ансом того upvot мне –

0

Здесь вы искали 2 поля username и name и входной параметр null.
Like не будет работать для 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 + '%') 

SQL Fiddle

+0

танков очень –

+0

Вы бы добавить некоторые повествования, чтобы объяснить, почему этот код работает, и что делает его ответ на вопрос? Это было бы очень полезно для человека, задающего вопрос, и любого другого, кто приходит. –

+0

уверен .. спасибо за совет ... – Sachin

0

Ваша проблема заключается в том, что вы не позволяет u_name быть нулевым в вашем столе. Что это, на единственной записи с u_username, содержащими «мхом»

CREATE PROCEDURE 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 ISNULL(u_name,'') LIKE ISNULL('%' + @Name + '%', u_name) 

Вы могли бы также иметь третий условный тест на NULL в явной форме.

AND ((u_name is null) or (u_name LIKE ISNULL('%' + @Name + '%', u_name)) 
Смежные вопросы