2010-01-24 25 views
6

Tôi muốn in một câu lệnh đơn giản in (1 = 1), tôi mong đợi kết quả là TRUE hoặc 1 nhưng máy chủ sql cho tôi biết: Cú pháp không chính xác gần ' = '. tại sao vậy?Làm cách nào để lưu kết quả của một so sánh vào biến số

Same sẽ xảy ra cho một tuyên bố như thế

declare @test bit 
set @test = (1=1) 

trong tóm tắt làm thế nào tôi có thể "nhìn thấy" những gì được trả về từ một sự so sánh mà không sử dụng một tuyên bố NẾU

Cập nhật: Lý do tôi yêu cầu là bởi vì tôi đang cố gỡ lỗi tại sao câu lệnh sau đây

declare @AgingAmount smallint 
set @AgingAmount = 500 
select Amount, datediff(day,Batch.SubmitDate,getdate()) as Aging from myreporrt 
where datediff(day,Batch.SubmitDate,getdate()) > @AgingAmount 

sẽ trả về tất cả các hàng ngay cả khi lão hóa 300 vì vậy tôi muốn thử nghiệm nếu ngàyi ff (ngày, dateubmited, getdate())> 500 trả về true hoặc false nhưng không thể tìm thấy cách hiển thị kết quả của so sánh này.

+1

Bạn có thể cung cấp mẫu truy vấn chính xác mà bạn đang cố thực thi không? – toddk

+0

Tôi thực sự nên thay đổi tiêu đề cho câu hỏi này thành "Làm cách nào tôi có thể hiển thị kết quả so sánh mà không sử dụng câu lệnh if" –

Trả lời

6

Mặc dù SQL Server có khái niệm về một loại boolean, và nó hiểu rằng biểu thức giải quyết để một boolean trong IFWHERE khoản, nó không hỗ trợ tuyên bố boolean biến hoặc các thông số. Loại dữ liệu bit không thể lưu trữ kết quả của biểu thức boolean trực tiếp, mặc dù nó trông giống như một biểu thức.

gần nhất bạn có thể tới một kiểu dữ liệu boolean là thế này:

-- Store the result of a boolean test. 
declare @result bit 
select @result = case when <boolean expression> then 1 else 0 end 

-- Make use of the above result somewhere else. 
if @result = 1 
    ... 
else 
    ... 

Để thêm vào sự nhầm lẫn, SQL Server Management Studio xử bit như boolean kết quả khi hiển thị, và ADO.NET maps bit-System.Boolean khi truyền dữ liệu qua lại.

Cập nhật: Để trả lời câu hỏi mới nhất của bạn, hãy sử dụng cú pháp case when ... then 1 else 0 end trong tuyên bố select.

+1

Xem http://msdn.microsoft.com/en-us/library/ms188074.aspx để biết xác nhận "chính thức" về kiểu dữ liệu Boolean không được khai báo cũng như không thể gán được. – mjv

+0

Sheesh, nhưng cảm ơn !! Quay lại thời kỳ đồ đá với SQL Server – Bart

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