2

パラメータを渡そうとしていますが、パラメータが null の場合は、郡 ID をそれ自体に設定したいと考えています。郡 ID が null でない場合は、郡コラボレーション内のすべての郡からレコードを取得したいと考えています。

間違った構文エラーが発生します。これを行う方法についてのアイデアはありますか?

    DECLARE @pCountyId as int;

    select  p.Id, p.LastName, p.FirstName, c.Id, c.Description
    FROM Participant as p
    INNER JOIN Application as a on p.Id = a.ParticipantId
    INNER JOIN Dictionary.Counties as c on a.CountyId = c.Id
    WHERE 

    If @pCountyId is null 
        BEGIN
            c.Id = c.Id
        END
    ELSE
            c.Id in (SELECT cc.CountyId 
                    FROM CountyCollaboration as cc
                    WHERE cc.CollaborationId = (SELECT cc1.CollaborationId 
                                       FROM CountyCollaboration as cc1
                                       WHERE cc1.CountyId = @pCountyId))
4

3 に答える 3

5

試す:

WHERE 

(@pCountyId is null) OR 

c.Id in (SELECT cc.CountyId 
                    FROM CountyCollaboration as cc
                    WHERE cc.CollaborationId = (SELECT cc1.CollaborationId 
                                       FROM CountyCollaboration as cc1
                                       WHERE cc1.CountyId = @pCountyId))

ただし、条件を再考してください。サブクエリが多すぎます。

于 2013-11-07T21:05:24.413 に答える
0

私が理解している限り、クエリ内の方法で if ステートメントを追加することはできません。そのようなクエリの構文はありません。各ブロックで 2 つの個別のクエリを使用して、まさに行っていることを実行できます (SELECT/INNER JOIN を複製します) が、これは最も理想的なソリューションではありません。

于 2013-11-07T21:07:13.273 に答える