2012-02-03 2 views
0

Я работаю с хранимой процедурой в SQL Server 2005. Возможно ли использовать соединение, если только параметр не равен нулю? Ниже приведен пример запроса:SQL Conditional Join (с параметром/без параметра) в хранимой процедуре

ALTER PROCEDURE [dbo].[SPSample] 
@gender varchar(20) = null 
@username varchar(20) = null 
AS 

SELECT 
per.firstName, 
per.lastName, 
per.gender 

FROM person per 
INNER JOIN account ac on ac.idPerson = per.idPerson 

WHERE (
gender = @gender 
AND (@username is null or (@username is not null and @username = acc.username)) 

Как сделать INNER JOIN работает только если @username не равно нулю? Каков наилучший подход для получения ожидаемого результата?

+0

Ваш вопрос не ясен. – Sukanya

+0

@ Сукания, какая часть вам непонятна? – Andha

+0

Что на самом деле вы хотели знать, что было неясно .. – Sukanya

ответ

2
ALTER PROCEDURE [dbo].[SPSample] 
@gender varchar(20) = null 
@username varchar(20) = null 
AS 

SELECT 
per.firstName, 
per.lastName, 
per.gender 

FROM person per 
LEFT JOIN account ac 
ON  @username is not null 
    AND @username = ac.username 
    AND ac.idPerson = per.idPerson 

WHERE --(
gender = @gender 
--AND (@username is null or (@username is not null and @username = acc.username)) 

, хотя и не самый чистый, но он работает

+0

Я пробовал это только сейчас, но запрос не возвращал никаких строк, когда я пытался передать значение NULL в @username, когда он должен возвращать несколько строк. – Andha

+0

@ Анда, я думаю, вы говорите о левом соединении? и оставить поля 'account' пустыми, если' @ username' равно null? – cctan

+0

А, моя ошибка. Thx для ответа. – Andha

Смежные вопросы