0

この T-SQL コードが与えられた場合:

SELECT CASE 
         WHEN ( Cast (CASE 
                        WHEN Isnull(bpe.new, 0) = 0 
                             AND Isnull(bpe.regular, 0) = 0 
                             AND Isnull(bpe.bargain, 0) = 0 THEN 0 
                        ELSE 1 
                      END AS BIT) 
                AND @siteID IS NULL 
                 OR bpe.siteid = @siteID ) THEN 1 
         ELSE 0 
       END AS SiteHasBrandException 
FROM   brandpromoexceptions AS bpe 

エラーメッセージが表示されます:

条件が予想されるコンテキストで指定された非ブール型の式 TSQL

何故ですか?

4

2 に答える 2

1

その最初のビットの「false」としてゼロを意味する場合、クエリは次のようになります。

SELECT CASE WHEN 
NOT ( ISNULL(bpe.new, 0) = 0 
      AND Isnull(bpe.regular, 0) = 0 
      AND Isnull(bpe.bargain, 0) = 0 )
AND ( @siteID IS NULL 
      OR bpe.siteid = @siteID )
THEN 1 
ELSE 0 
END AS SiteHasBrandException 
FROM brandpromoexceptions AS bpe 

その「OR」句に注意するか、明確にするために括弧を追加する必要がある場合があります。ここで推測しました。

于 2013-05-21T16:03:09.583 に答える
0

CASE最初のステートメントをCAST条件ではなく呼び出しに渡しています。エラーメッセージはそれをほとんど説明しています。

あなたが何をしようとしているのか正確にはわかりませんがCASE WHEN、その後の使用に基づいてブール値をに渡す必要があることを理解しているようですCASEので、これが役立つことを願っています.

これは、コードを次のように変更してみてください。

SELECT CASE 
     WHEN ( Cast (CASE 
                    WHEN Isnull(bpe.new, 0) = 0 
                         AND Isnull(bpe.regular, 0) = 0 
                         AND Isnull(bpe.bargain, 0) = 0 THEN 0 
                    ELSE 1 
                  END AS BIT) = 1
            AND @siteID IS NULL 
             OR bpe.siteid = @siteID ) THEN 1 
     ELSE 0 
   END AS SiteHasBrandException 
FROM   brandpromoexceptions AS bpe 
于 2013-05-21T15:56:20.103 に答える