1 и 0 не распознаются как логические константы в T-SQL - PullRequest
2 голосов
/ 10 марта 2010

Если я попытаюсь выполнить этот запрос в SQL Server 2005:

SELECT 1 WHERE NOT ( 0 )

Я получаю эту ошибку:

Сообщение 4145, уровень 15, состояние 1, строка 1 An выражение небулева типа указано в контексте, где ожидается состояние, около ')'.

Иногда при отладке сложных операторов WHERE я вырезаю кусочки и проверяю определенный сценарий, вставляя что-то вроде 1=1 для true Я бы предпочел просто использовать 1 или TRUE, но в вышеуказанном случае это не работает. Почему он не может оценить NOT( 0 ) как логическое выражение?

Редактировать: Это работает нормально, показывая, что мне не нужно добавлять столбец:

SELECT 1 WHERE NOT(1<>1)

Ответы [ 4 ]

5 голосов
/ 10 марта 2010

0 и 1 - целые числа. Сами по себе они не являются логическими выражениями, и в SQL только выражения могут иметь значение ИСТИНА, ЛОЖЬ или НЕИЗВЕСТНО. Сказать «НЕ 7,5», например, само по себе не является логическим выражением. На самом деле то, что вы пытаетесь сказать «НЕ (7.5 <> 0)». Таким образом, в вашем примере вам нужно будет преобразовать значение в выражение:

Select 1 Where Not ( 0 <> 0 )

По крайней мере, в T-SQL нет констант, которые вы можете использовать для TRUE и FALSE. Т.е. нет средств для запроса:

Select 1 Where Not TRUE
1 голос
/ 10 марта 2010

0 и 1 не являются логическими константами, они битовые константы .

0 голосов
/ 10 марта 2010
SELECT 1 WHERE NOT ( 0 ) 

В классе where вы должны иметь сравнение, где что = что, где что <> что и т. Д. Вы не можете сравнивать только с одним значением. Нужно знать, с чем вы пытаетесь сравнить 0.

0 голосов
/ 10 марта 2010

потому что предложение WHERE отделено от предложения SELECT

вы можете выбрать совершенно разные вещи в SELECT, которых нет даже в предложении WHERE

например

select name, address, state, company, country
from bla
where occupation='programmer'
and hobby ='debugging'

поэтому, где not (0) будет означать, что в этом случае вам нужно добавить столбец

AND RegionID <> 0

или

AND RegionID NOT IN (0) --althoug if you have NULLS in coumn this won't work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...