SQL: проверить, не содержит ли таблица пустые значения в определенном столбце - PullRequest
1 голос
/ 05 ноября 2010

Я работаю над хранимой процедурой, и в какой-то момент я хочу проверить свою табличную переменную, чтобы увидеть, есть ли ровно ноль строк с конкретным полем, равным нулю.Другими словами, для каждой строки в моей таблице это поле имеет ненулевое значение.Я хотел бы сделать это не проверяя count (), а используя EXISTS.

В настоящее время я делаю это:

IF EXISTS ( SELECT * FROM @sometable where somefield IS NULL ) 
       SET @somefield = @somefield /* just a way to skip this */
ELSE
       /* perform some logic */

Теперь я знаю, что могу использовать NOT EXISTS, но я предполагаю, что NOT EXISTS намного медленнее, чем EXISTS.Клянусь, я недавно прочитал что-то (на SO, я думаю), в котором был пример того, как сделать то, что я хочу сделать с одним предложением Exists, но я не могу его найти и не смог его добавить в закладки.Хотя, возможно, я ошибаюсь.

Причина, по которой я установил if / else, заключается в том, что из моего понимания EXISTS будет возвращаться до NOT EXISTS, и поскольку это довольно интенсивная хранимая процедура (вызывается довольно часто, а иногда и вОсновная часть) Я надеюсь сохранить некоторые обработки здесь.

Может быть, я смотрю на все это неправильно или предполагаю что-то неправильно.Я здесь, чтобы учиться, поэтому указывайте мне правильное направление, если я все понял неправильно.

Редактировать: Очевидно, что нет никакой разницы в этом контексте (не является частью предложения / подзапроса where).Но предположим, что я БЫЛ использую, существует в предложении where и хотел проверить точный сценарий выше (ВСЕ ненулевые значения в поле), особенно когда в рассматриваемой таблице потенциально могут быть тысячи строк.[что-то новое для SO, если я должен опубликовать это как отдельный вопрос, пожалуйста, дайте мне знать]

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

И СУЩЕСТВУЕТ, или НЕ СУЩЕСТВУЕТ в этом формате, остановится, когда они найдут строку и при необходимости дадут истину / ложь.

ПЧ будет соответственно прыгать, и здесь не так много для оптимизации ...

0 голосов
/ 05 ноября 2010

NOT EXISTS и EXISTS должны занимать одинаковое количество времени. Любой из них может быть получен путем первого вычисления другого и отрицания результата.

...