2017-04-05 5 views
0

C#if文をSQL文if文に変換しようとしています。この条件に基づいてレコードをフィルタするためにSQL Server文内で使用できます。私は以下のとおりでした何C#if文をSQL Serverに変換するステートメント

public bool checkSourceSystem(bool A, bool B, bool C, string SendToA, string SendToB, string SendToC) 
    { 
     int count = 0; 

     if (A == true || B == true || C == true) 
     { 
      if(A == true && SendToA == "Success") 
      { 
       count++; 
      } 
      else 
      { 
       return false; 
      } 

      if(B == true && SendToB== "Success") 
      { 
       count++; 
      } 
      else 
      { 
       return false; 
      } 

      if (C == true && SendToC == "Success") 
      { 
       count++; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     else 
     { 
      return false; 
     } 

     if (count > 0) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

}

。しかし、私はこれを正しいとは思わない。

SELECT CASE 

WHEN A = '1' AND SendToA = '1' THEN 'true' 

WHEN B = '1' AND SendToB = '1' THEN 'true' 

WHEN C = '1' AND SendToC = '1' THEN 'true' 

ELSE 'false' 

END 

FROM Table1 

A、B、C、SendToA、SendToB、SendToCはテーブルのフィールドとのSQLServerでtrueSuccess = 1の値です。 誰も私を助けることができますか?

+0

あなたを持っているどのくらい遠くまで持っている?あなたのテーブルはどのように見えますか? –

+1

何を試しましたか?どのようなエラーがありましたか? – BugFinder

+0

@BugFinder SQLサーバーでIf..ELSEを使用しようとしましたが、文法エラーです。 [link](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql) – xChaax

答えて

0

作成SQLの機能で、RESULT(真/偽)を返す次の文があります。あなたのC#方法を見てみると

DECLARE @A BIT=0 
DECLARE @B BIT=0 
DECLARE @C BIT=0 
DECLARE @SendToA VARCHAR(50)='' 
DECLARE @SendToB VARCHAR(50)='' 
DECLARE @SendToC VARCHAR(50)='' 
DECLARE @Count INT=0 

DECLARE @Result VARCHAR(50)='' 

IF (@A=1 OR @B=1 OR @C=1) 
BEGIN 
    IF (@A=1 AND @SendToA='Success') 
    BEGIN 
     SET @[email protected]+1 
    END 
    ELSE 
    BEGIN 
     SET @Result='False' 
    END 

    IF (@B=1 AND @SendToB='Success') 
    BEGIN 
     SET @[email protected]+1 
    END 
    ELSE 
    BEGIN 
     SET @Result='False' 
    END 

    IF (@C=1 AND @SendToC='Success') 
    BEGIN 
     SET @[email protected]+1 
    END 
    ELSE 
    BEGIN 
     SET @Result='False' 
    END 
END 
ELSE 
BEGIN 
    SET @Result='False' 
END 

IF @Count>0 
BEGIN 
    SET @Result='True' 
END 

SELECT @Result AS Result 
+0

ありがとう、しかし、私はどのように私のselect文のwhere節にこの関数を追加できますか?フィルタのwhere句でCASEの代わりにこの関数を使用します(ELSEの場合)。 – xChaax

1

、戻り値はfalseときです:

  1. ABCはすべてfalse
  2. Aあるが偽であるかAtrueですが、SendToASuccessではありません
  3. Bはfalseまたは==

    1. ABtrueですが、CtrueあるSendToBではありませんSuccess
    2. Cが偽であるかが、SendToCこれはtrueがしかときが返されることを意味Success

    ではありませんB == C == true

  4. SendToA == SendToB == SendToC == Success

これは、その後に短縮することができます。

public bool checkSourceSystem(bool A, bool B, bool C, string SendToA, string SendToB, string SendToC) 
{ 
    return (A && B && C) && SendToA == "Success" && SendToB == "Success" && SendToC == "Success"; 
} 

これは、次のCASEステートメントに対応:

select *, 
    (
     CASE WHEN A=1 
      AND B=1 
      AND C=1 
      AND SendToA = 1 
      AND SendToB = 1 
      AND SendToC = 1 
     THEN 'true' 
     ELSE 'false' 
     END 
    ) as TrueFalse 
from Table1