2016-06-14 107 views
3

類似的問題已經被問here語法錯誤使用where子句

情況下無論如何,我得到一個語法錯誤我想不通。

這是我的代碼:

declare @MyParameter integer 
se @MyParameter = Set At Runtime (could be -1 or any value >=1) 

SELECT manyfields FROM manyjoinedtables 
where 
case when @MyParameter> -1 then 
(FIELD1 **=** @MyParameter AND ANOTHERFIELD = Value**)** 
end -- note: in case @MyParameter = -1 i do not want to add where condition 

反正Management Studio中強調紅色2個字符包圍**以上。

爲什麼?語法錯誤在哪裏?

回答

2

給這一去;

DECLARE @MyParameter INT 
SET @MyParameter = Set At Runtime (could be -1 or any value >=1) 

SELECT manyfields 
FROM manyjoinedtables 
WHERE 
    @MyParameter <= -1 
OR 
(
    @MyParameter > -1 
    AND FIELD1 = MyParameter 
    AND AnotherField = Value 
) 
+0

謝謝,它的工作原理,所以在鏈接的帖子中接受的答案中的語法是錯誤的。 – LaBracca

+0

不知道,它可能工作。儘管如此,如果你沒有在你的where子句中進行計算,那麼性能會更好,所以我肯定會遵循這個邏輯。如果這回答您的問題,請隨時將答案標記爲已接受。 –

+3

@ user193655如果語法在某些RDBMS中具有布爾數據類型,則該語法的每個分支都是布爾型,並且整個case表達式的數據項將爲布爾型。但是SQL Server沒有。 –