2010-01-24 5 views
6

Я хочу напечатать простую инструкцию print (1 = 1), я ожидаю, что результат будет TRUE или 1, но sql server скажет мне: Неправильный синтаксис рядом с ' знак равно Почему?Как я могу сохранить результат сравнения в переменной

То же будет происходить в заявлении, как этот

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

в целом, как я могу «увидеть», что возвращается из сравнения без использования оператора IF

Update: Причину Я спрашиваю это потому, что я пытаюсь отлаживать почему следующее заявление

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

возвращает все строки, даже с возрастом 300 так я хотел, если datedi проверить ff (день, dateubmited, getdate())> 500 возвращает true или false, но не смог найти способ отображения результата этого сравнения.

+1

Не могли бы вы предоставить образец точного запроса, который вы пытаетесь выполнить? – toddk

+0

На самом деле я должен изменить заголовок для этого вопроса: «Как я могу отобразить результат сравнения без использования оператора if» –

ответ

6

Хотя SQL Server имеет понятие boolean типа, и он понимает, выражение, которые разрешают к boolean в IF и WHERE положений, он не поддерживает декларирование boolean переменных или параметров. Тип данных bit не может сохранить результат выражения boolean, даже если он выглядит подозрительно похожим на один.

Ближайший вы можете получить тип данных boolean это:

-- 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 
    ... 

Чтобы добавить к путанице, SQL Server Management Studio обрабатывает bit как boolean при отображении результатов, и ADO.NET карты bit к System.Boolean при передаче данных вперед и назад.

Update: Чтобы ответить на ваш последний вопрос, используйте синтаксис case when ... then 1 else 0 endselect в заявлении.

+1

См. Http://msdn.microsoft.com/en-us/library/ms188074.aspx для «официальное» подтверждение о том, что тип данных Boolean не является декларируемым и не может быть присвоен. – mjv

+0

Sheesh, но спасибо !! Вернуться к каменному возрасту с помощью SQL Server – Bart

Смежные вопросы