Условное соединение SQL (с / без параметра) в хранимой процедуре - PullRequest
0 голосов
/ 03 февраля 2012

Я работаю с хранимой процедурой в SQL Server 2005. Можно ли использовать объединение, если только параметр не равен NULL?Ниже приведен пример запроса:

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 не равно нулю?Каков наилучший подход для получения ожидаемого результата?

1 Ответ

2 голосов
/ 03 февраля 2012
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))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...