2014-11-14 94 views
0

在SQL Server中,您可以在.NET上添加一條SQL語句,並使用'或'或'和'。如果SQL Server存儲過程中的其他語句

我被卡住瞭如何在SQL Server存儲過程中執行此操作。

問:

  1. 這是什麼叫什麼,你添加SQL語句一起?我有一種感覺,它開始於'c'concocations?

  2. 我相信我接近下面的代碼有一個'變量'SQL?

代碼:

BEGIN 
    SELECT * 
    FROM TblEmployee 
    WHERE 
     FirstName LIKE '%' + LTRIM(RTRIM((@sFirstName))) + '%' 
     or 
     Surname LIKE '%' + LTRIM(RTRIM((@sSurname))) + '%' 
     and 
     IF (LTRIM(RTRIM((@sOfficeBase))) = 'xyz1234') 
     and OfficeBase = LTRIM(RTRIM((@sOfficeBase))) 
     ELSE 
     or 
     OfficeBase= LTRIM(RTRIM((@sOfficeBase))) 
END 

有simular查詢,如If else in stored procedure sql server

但我有一種感覺,我搜索的 '錯誤' 的問題。在此先感謝

+1

*級聯*(雖然這並不能真正說明的if/else分支) – 2014-11-14 13:30:36

+2

'ELSE或'/'IF和'是無意義的,格式是'IF/ELSE [OR/AND ...] 「也許你最好用文字描述你想要的邏輯,因爲它很難解釋你所顯示的內容。 – 2014-11-14 13:31:10

+0

我想添加到基於來自用戶的值的SELECT語句。如果該值匹配我希望SELECT語句添加'和x = y'語句,否則它應該是'或'語句。 – indofraiser 2014-11-14 14:07:29

回答

1

Where子句允許您嵌入條件邏輯 - 您不需要if/then/else,這同樣適用,因爲afaik,where子句中的任何SQL方言都不支持。

BEGIN 
    SELECT * 
    FROM TblEmployee 
    WHERE 
     FirstName LIKE '%' + LTRIM(RTRIM((@sFirstName))) + '%' 
     or 
     Surname LIKE '%' + LTRIM(RTRIM((@sSurname))) + '%' 
     and 
     (OfficeBase = 'xyz1234' 
     or 
     OfficeBase= LTRIM(RTRIM((@sOfficeBase))) 
END 
+0

只是爲了澄清,如果@sOfficeBase的值是'xyz1234',將只使用'和'語句,否則將使用'或'語句? – indofraiser 2014-11-14 13:44:59

+0

只需重新閱讀 - 括號內第一位的辦公室比較是多餘的,所以我已將其刪除。應該更易於閱讀 - 方括號的工作方式與任何語言的方式一樣。 – 2014-11-14 14:55:03

0

我很確定你原來的查詢中有一些丟失的括號。不知道爲什麼要將LTRIM和RTRIM添加到您的參數中。在黑暗中拍攝我懷疑你可以歸結爲你的查詢。

SELECT * --This should be the column names actually needed, * is not good for production code 
FROM TblEmployee 
WHERE 
(
    FirstName LIKE '%' + @sFirstName + '%' 
    or 
    Surname LIKE '%' + @sSurname + '%' 
) 
and OfficeBase in ('xyz1234', @sOfficeBase)