0

UNION の形式で複数のクエリがあります

クエリの 1 つで、値をチェックするために where 句に Case ステートメントが必要です。@CategoryID私の条件は、if @CategoryID <> 0 then @CategoryID = 0 です。

@CategoryID =0注: unionのステートメントの1つが実際の値を必要とするため、渡すことはできません。

@CategoryIDcategoryid が 0 でない場合、for last ステートメントのみを 0 にリセットする必要があります。

エラーを生成する if ステートメントを使用してみました & エラーを生成する where 句で case ステートメントも試しました。@CategoryID =0ストア プロシージャの for last sql ステートメントをリセットできるように、この点で助けていただければ幸いです

ALTER PROCEDURE [dbo].[usp_GetBannerByIDsAPICPL]
    @ArticleID int,
    @PageID int,
    @IssueID int,
    @CategoryID int,
    @BannerLayoutPosition int,
    @LangID int
AS
BEGIN
    SET NOCOUNT ON

    -- will show artile related banner
    SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath,BannerURL,BannerLocation FROM Banner_Manager    
    WHERE ArticleID = @ArticleID    AND BannerLocation = @BannerLayoutPosition AND LanguageID=@LangID AND Active = 1 
    UNION ALL

    -- show banner by category & Issue
    SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath ,BannerURL,BannerLocation FROM Banner_Manager   
    WHERE CategoryID = @CategoryID AND IssueID = @IssueID   AND BannerLocation = @BannerLayoutPosition 
    AND LanguageID=@LangID AND Active = 1 
        UNION ALL

    -- show banner by category 
    SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath ,BannerURL,BannerLocation FROM Banner_Manager   
    WHERE CategoryID = @CategoryID  AND BannerLocation = @BannerLayoutPosition 
    AND LanguageID=@LangID AND Active = 1 
    UNION ALL
    -- will show page  related banner
    SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath,BannerURL,BannerLocation FROM Banner_Manager    
    WHERE PageID = @PageID  AND BannerLocation = @BannerLayoutPosition AND LanguageID=@LangID AND Active = 1 
    UNION ALL
    --will show issue related banner
    -- Need To Check if @CategoryID is not 0 if it is not 0 then i have to set the @CategoryID = 0
    SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath,BannerURL,BannerLocation FROM Banner_Manager    
    WHERE IssueID = @IssueID AND CategoryID = @CategoryID AND BannerLocation = @BannerLayoutPosition AND LanguageID=@LangID AND Active = 1 


END
4

2 に答える 2

0

この条件が最後のステートメントにのみ適用される場合:

@CategoryID <> 0 then @CategoryID = 0

@CategoryIDチェックしたい値が常にゼロになるのに、なぜまだパラメーターを渡しているのですか?

最後のステートメントで、カテゴリをゼロと直接比較できないのはなぜですか。

-- will show issue related banner
SELECT  BannerID, 
        BannerName, 
        '../images/Banners/' + BannerImageFile AS ImagePath,
        BannerURL,
        BannerLocation 
FROM    Banner_Manager    
WHERE   IssueID = @IssueID AND 
        CategoryID = 0 AND      -- <<== HERE
        BannerLocation = @BannerLayoutPosition AND 
        LanguageID=@LangID AND 
        Active = 1
于 2013-02-19T06:45:36.350 に答える
0

そのクエリで @CategoryID を変更したくない場合は、union ステートメントで @CategoryID を 0 に設定しようとしないでください。別のステートメントの後に 0 に設定します。

UNION ALL
--will show issue related banner
-- Need To Check if @CategoryID is not 0 if it is not 0 then i have to set the @CategoryID = 0
SELECT BannerID, BannerName, '../images/Banners/' +BannerImageFile AS ImagePath,BannerURL,BannerLocation FROM Banner_Manager    
WHERE IssueID = @IssueID AND CategoryID = @CategoryID AND BannerLocation = @BannerLayoutPosition AND LanguageID=@LangID AND Active = 1 

SET @CategoryID = 0
于 2013-02-19T06:47:19.677 に答える