3

手順があり、入力が 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

入力がnullの場合、問題に直面しています。その場合、where条件を回避する必要があります。

例:

@PersonID が null の場合、選択クエリには次の構造が必要です。

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 

動的クエリは避けたい。

4

3 に答える 3

5

各パラメーターを括弧で囲み、null をテストします。

(PERSON.manager_id=@ManagerID or @ManagerID is NUll)
于 2013-07-16T19:18:23.343 に答える
2

私の個人的なお気に入りの方法は次のとおりです。

WHERE PERSON.manager_id = COALESCE(@ManagerID, PERSON.manager_id)

各パラメータに合体を使用すると見栄えが良くなります。

これは@ManagerID IS NULL、常に自分自身に一致するため、PERSON.manager_idであっても一致しますが、 の場合は停止します@ManagerID IS NOT NULL

COALESCE(expression1, expression2, n)必要な数のパラメーターを指定できることに注意してください。

于 2013-07-16T19:48:01.887 に答える