2017-04-05 99 views
0

我想將C#if語句轉換爲SQL Server if語句,以便我可以在SQL Server語句中使用它來基於此條件篩選記錄。如果將語句轉換爲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是在表中的字段和用於true值和Success = 1 SQLSERVER。 任何人都可以幫助我嗎?

+0

多遠有你得到?你的桌子是什麼樣的? –

+1

你有什麼試過的,你得到了什麼錯誤? – BugFinder

+0

@BugFinder我試圖在SQL服務器中使用If..ELSE,我得到的只是語法錯誤。 [鏈接](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql) – xChaax

回答

0

創建函數SQL與下面的語句,將返回結果(真/假)。

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子句中。使用此函數(如果... ELSE)而不是CASE中的where子句中的過濾器。 – xChaax

1

看着你C#方法,返回值是false時:

  1. ABC都是false
  2. A是假的或Atrue,但SendToASuccess
  3. B是錯誤的或Btrue,但SendToB不是Success
  4. C是假的或Ctrue,但SendToC不是Success

這意味着true只回來過當:

  1. A == B == C == true and
  2. SendToA == == SendToB == SendToCSuccess

這可以被簡化爲:

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