当filter参数为null时绕过WHERE子句

use*_*176 2 sql sql-server sql-server-2008

我有一个过程,需要绕过输入为null的WHERE子句.

请找到以下条件.

CREATE PROCEDURE [dbo].[spPERSON_SELECT]    
(
@PersonID INT = NULL,
@OrganizationID INT = NULL,
@ManagerID INT = NULL 
)
AS

BEGIN
SELECT PERSON.name, ORGANIZATION.name,PERSON.manager 
FROM PERSON 
    INNER JOIN ORGANIZATION 
        ON PERSON.person_id = ORGANIZATION.person_id    
WHERE PERSON.person_id = @PersonID  
    and ORGANIZATION.organization_id = @OrganizationID  
    and PERSON.manager_id = @ManagerID 

END
GO
Run Code Online (Sandbox Code Playgroud)

Iam面临一个问题,而输入为null,在这种情况下需要避免where条件.

例:

如果@PersonID为null,那么我的select查询需要以下结构:

SELECT PERSON.name, ORGANIZATION.name,PERSON.manager 
FROM PERSON 
    INNER JOIN ORGANIZATION 
        ON PERSON.person_id = ORGANIZATION.person_id    
WHERE ORGANIZATION.organization_id = @OrganizationID
    and PERSON.manager_id = @ManagerID 
Run Code Online (Sandbox Code Playgroud)

我想避免动态查询.

Red*_*ter 5

括起每个参数并测试null即

(PERSON.manager_id=@ManagerID or @ManagerID is NUll)
Run Code Online (Sandbox Code Playgroud)