2012-02-03 124 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