Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程中的SQL条件联接(带/不带参数)_Sql_Sql Server 2005 - Fatal编程技术网

存储过程中的SQL条件联接(带/不带参数)

存储过程中的SQL条件联接(带/不带参数),sql,sql-server-2005,Sql,Sql Server 2005,我正在使用SQLServer2005中的一个存储过程。如果只有参数不为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.idPers

我正在使用SQLServer2005中的一个存储过程。如果只有参数不为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))
如何使
内部联接仅在
@username
不为空时工作?获得预期结果的最佳方法是什么

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))

虽然不是最干净的,但它可以工作

@Sukanya哪个部分你不清楚?你到底想知道什么不清楚..我刚才试过了,但是当我试图在@username中传递空值时,查询没有返回任何行,而它应该返回几行。@我想你是在谈论左连接吗?如果
@username
为空,请将
帐户的字段保留为空?啊,我的错误。谢谢你的回答。