Как я могу сохранить результат сравнения в переменную - PullRequest
6 голосов
/ 24 января 2010

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

То же самое произойдет с таким утверждением

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

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

Обновление: причина, по которой я спрашиваю, состоит в том, что я пытаюсь отладить, почему следующее утверждение

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 поэтому я хотел проверить, возвращает ли datediff (day, dateubmited, getdate ())> 500 значение true или false, но не смог найти способ отображения результата этого сравнения.

1 Ответ

6 голосов
/ 24 января 2010

Хотя 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 при передаче данных туда и обратно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...