2009-01-30 42 views
40

Tôi muốn tạo ra một SQL Select để làm một bài kiểm tra đơn vị trong MS SQL Server 2005. Ý tưởng cơ bản là thế này:Expressions Boolean trong SQL Chọn danh sách

chọn 'Kiểm tra Tên', foo = 'quả' từ bar nơi baz = (một số tiêu chí)

Ý tưởng là, nếu giá trị của cột "foo" là "Kết quả", thì tôi sẽ nhận được giá trị đúng/1; nếu không, tôi sẽ bị sai/0.

Thật không may, T-SQL không thích biểu thức; nó nghẹt thở trên dấu bằng.

Có cách nào để đánh giá biểu thức trong danh sách chọn SQL và nhận kết quả trả về không? (Hoặc một số cách khác để đạt được thử nghiệm đơn vị mà tôi muốn?)


EDIT: 3 tuyệt vời, câu trả lời, tất cả được xây dựng xung quanh CASE. Tôi sẽ chấp nhận feihtthief vì anh ấy có đại diện ít nhất và do đó cần nó nhất. :-) Cảm ơn tất cả mọi người.

+1

Sẽ không bao giờ ngừng ngạc nhiên về cách xử lý các phép toán vô lý của TSQL. Câu hỏi tuyệt vời BTW. – hajikelist

Trả lời

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

Sử dụng HỒ SƠ:

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

Điều này tốt hơn một chút vì nó sử dụng trường hợp tối ưu 'trường hợp', tức là 'trường hợp foo khi' Kết quả'' thay vì 'trường hợp khi foo = 'Result'' –

+0

@MarkSowul: Bạn có thể cung cấp một số thông tin về cách đơn giản được tối ưu hóa trong trường hợp tìm kiếm? Tôi đã luôn luôn ấn tượng rằng một trường hợp đơn giản được đánh giá hoặc viết lại bởi trình phân tích cú pháp cho một trường hợp được tìm kiếm, nhưng dựa trên điều này (http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of -trường hợp-biểu hiện) Tôi nghĩ có rất nhiều trường hợp trong thế giới thực, nơi bạn có thể đúng. –

+0

Tôi xin lỗi, tôi không nhớ tại thời điểm này. Tôi mơ hồ nhớ đã thấy các kế hoạch thực hiện khác nhau trong một số tình huống cụ thể. Điều này cũng sẽ có trước SQL 2012. Cuối cùng mặc dù vì 'trường hợp đơn giản' (trường hợp x khi y) bị hạn chế hơn, trình tối ưu hóa phải có thời gian dễ dàng hơn với nó –

5

Bạn cũng có thể sử dụng:

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

Tôi biết điều này đã được hỏi một thời gian trở lại, nhưng tôi hy vọng điều này sẽ giúp người ra khỏi đó.

+1

IIF chỉ khả dụng từ Sql Server 2012 trên các phường và Sql Azure theo như tôi biết (https://msdn.microsoft.com/en-za/library/hh213574.aspx) –

Các vấn đề liên quan