Простая проверка на Запрос Select пустой результат

Кто-либо может указать, как проверить, возвращает ли запрос Select не пустой набор результатов?

Например, у меня есть следующий запрос:

SELECT * FROM service s WHERE s.service_id = ?;

Если я делаю что-то как затем:

ISNULL(SELECT * FROM service s WHERE s.service_id = ?)

протестировать, если набор результатов не пуст?

59
задан Denys S. 21 May 2010 в 19:30
поделиться

7 ответов

Использовать @@ ROWCOUNT:

SELECT * FROM service s WHERE s.service_id = ?;

IF @@ROWCOUNT > 0 
   -- do stuff here.....

Согласно Электронная документация по SQL Server :

Возвращает количество строк, затронутых последнее заявление. Если количество строк больше 2 миллиардов, используйте ROWCOUNT_BIG.

77
ответ дан 24 November 2019 в 18:00
поделиться
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
 BEGIN
   --DO STUFF HERE

 END
97
ответ дан 24 November 2019 в 18:00
поделиться

Я согласен с Эдом Б. Вам следует использовать метод EXISTS, но более эффективный способ сделать это:

IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
   --DO STUFF HERE

END

HTH

9
ответ дан 24 November 2019 в 18:00
поделиться
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
3
ответ дан 24 November 2019 в 18:00
поделиться
SELECT count(*) as count FROM service s WHERE s.service_id = ?;

проверить, если count == 0.

Более причудливо:

выберите случай, когда (SELECT count (*) as count FROM service s WHERE s.service_id =?) = 0 затем «Никаких ссор, братан!» else «У вас есть данные!» заканчиваются на stupid_message;

1
ответ дан 24 November 2019 в 18:00
поделиться

Подведем итог нижеприведенным сообщениям:

Если все, что вас волнует, это наличие хотя бы одной совпадающей строки в БД, тогда используйте существует , поскольку это наиболее эффективный способ проверки: он вернет истину, как только найдет хотя бы одну совпадающую строку, тогда как count и т. д. найдет все совпадающие строки.

Если вам действительно нужно использовать данные для обработки, или если запрос имеет побочные эффекты, или если вам нужно знать фактическое общее количество строк, проверьте счетчик ROWCOUNT или ], вероятно, лучший способ под рукой.

1
ответ дан 24 November 2019 в 18:00
поделиться

try:

SELECT * FROM service s WHERE s.service_id = ?;

IF @@ROWCOUNT=0
BEGIN
    PRINT 'no rows!'
END
6
ответ дан 24 November 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: