Кто-либо может указать, как проверить, возвращает ли запрос Select не пустой набор результатов?
Например, у меня есть следующий запрос:
SELECT * FROM service s WHERE s.service_id = ?;
Если я делаю что-то как затем:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
протестировать, если набор результатов не пуст?
Использовать @@ ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT > 0
-- do stuff here.....
Согласно Электронная документация по SQL Server :
Возвращает количество строк, затронутых последнее заявление. Если количество строк больше 2 миллиардов, используйте ROWCOUNT_BIG.
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
Я согласен с Эдом Б. Вам следует использовать метод EXISTS, но более эффективный способ сделать это:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
HTH
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
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;
Подведем итог нижеприведенным сообщениям:
Если все, что вас волнует, это наличие хотя бы одной совпадающей строки в БД, тогда используйте существует
, поскольку это наиболее эффективный способ проверки: он вернет истину, как только найдет хотя бы одну совпадающую строку, тогда как count
и т. д. найдет все совпадающие строки.
Если вам действительно нужно использовать данные для обработки, или если запрос имеет побочные эффекты, или если вам нужно знать фактическое общее количество строк, проверьте счетчик ROWCOUNT
или
], вероятно, лучший способ под рукой.
try:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT 'no rows!'
END