2009-01-30 152 views
40

我想創建一個SQL選擇做在MS SQL Server中的單元測試2005年的基本思路是這樣的:布爾表達式

選擇「測試名稱」,富=從「結果」 bar 其中baz =(某些標準)

這個想法是,如果「foo」列的值是「Result」,那麼我會得到true/1的值;如果不是,我會得到假/ 0。

不幸的是,T-SQL不喜歡錶達式;它在等號上窒息。

是否有某種評估SQL選擇列表中的表達式並獲得可返回結果的方法? (或其他方式實現我想要的單元測試?)


編輯:3偉大的答案,都圍繞CASE建成。我會接受feihtthief,因爲他有最少的代表,因此最需要它。 :-) 謝謝大家。

+1

永遠不會驚訝TSQL處理布爾值是多麼可笑。好的問題BTW。 – hajikelist 2017-02-04 09:07:58

回答

17
SELECT 'TestName', 
    CASE WHEN Foo = 'Result' THEN 1 ELSE 0 END AS TestResult 
FROM bar 
WHERE baz = @Criteria 
13

用例:

SELECT 'Test Name' [col1], 
    CASE foo 
    WHEN 'Result' THEN 1 
    ELSE 0 
    END AS [col2] 
FROM bar 
WHERE baz = (some criteria) 
+0

這一個稍微好一些,因爲它使用了優化的等式'case',即`case foo when'Result'`而不是`case when foo ='Result'` – 2011-06-02 21:16:09

+0

@MarkSowul:你能提供一些關於簡單情況在搜索的案例上進行了優化?我總是覺得一個簡單的案例會被解析器評估或者重寫爲一個搜索到的案例,但是基於這個(http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of這種情況下的表達)我認爲有很多真實世界的情況下,你可能是正確的。 – 2016-05-11 07:10:41

5

您還可以使用:

select 
    'Test Name', 
    iif(foo = 'Result', 1, 0) 
from bar 
where baz = (some criteria) 

我知道這是問而回,但我希望這可以幫助別人那裏。