2012-02-03 61 views
0

我正在使用SQL Server 2005中的存儲過程。如果只有參數不爲空,是否可以使用連接?下面是查詢的一個例子:存儲過程中的SQL條件連接(帶/不帶參數)

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 2012-02-03 06:47:20

+0

@Sukanya你不清楚哪一部分? – Andha 2012-02-03 06:49:19

+0

實際上你想知道的東西不清楚.. – Sukanya 2012-02-03 07:21:51

回答

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

我剛剛嘗試過,但是當我嘗試在@username中傳遞NULL值時,查詢沒有返回任何行,因此應該返回多行。 – Andha 2012-02-03 07:02:24

+0

@Andha我想你在談論左連接?並且如果'@ username'爲空,將'account'的字段留空? – cctan 2012-02-03 07:08:08

+0

啊,我的錯。 Thx爲答案。 – Andha 2012-02-03 07:20:16