SQL Server - логический литерал? - PullRequest
       15

SQL Server - логический литерал?

67 голосов
/ 24 августа 2011

Как записать буквенное логическое значение в SQL Server? Смотрите пример использования:

select * from SomeTable where PSEUDO_TRUE

другой образец:

if PSEUDO_TRUE
begin
  select 'Hello, SQL!'
end 

Примечание. Приведенный выше запрос не имеет ничего общего с тем, как я собираюсь его использовать. Это просто для проверки буквального логического значения.

Ответы [ 12 ]

1 голос
/ 15 августа 2014

Я подвергаю сомнению ценность использования логического значения в TSQL. Каждый раз, когда я начинал мечтать о циклах Booleans & For, я понимал, что подхожу к проблеме, как программист на Си, а не программист на SQL. Проблема стала тривиальной, когда я переключил передачи.

В SQL вы управляете наборами данных. «WHERE BOOLEAN» неэффективен, так как не меняет набор, с которым вы работаете. Вам нужно сравнить каждую строку с чем-то, чтобы предложение фильтра было эффективным. Table / Resultset равен iEnumerable, оператор SELECT равен цикл FOREACH.

Да, "ГДЕ IsAdmin = True" читать лучше, чем "ГДЕ IsAdmin = 1"

Да, "WHERE True" будет лучше, чем "WHERE 1 = 1, ..." при динамическом генерировании TSQL.

и, возможно, передача логического значения в хранимый процесс может сделать оператор if более читабельным.

Но в основном, чем больше таблиц IF, WHILE и Temp у вас есть в вашем TSQL, тем больше вероятность того, что вам придется его реорганизовать.

0 голосов
/ 08 марта 2013
select * from SomeTable where null is null

или

select * from SomeTable where null is not null

Может быть, это лучшая производительность?

...