Проверьте, содержит ли таблица строки или нет SQL Server 2005 - PullRequest
55 голосов
/ 27 января 2010

Как проверить, содержит ли таблица строки SQL Server 2005 или нет?

Ответы [ 6 ]

91 голосов
/ 27 января 2010

С какой целью?

  • Самый быстрый для IF будет IF EXISTS (SELECT * FROM Table)...
  • Для результирующего набора SELECT TOP 1 1 FROM Table возвращает либо ноль, либо одну строку
  • Для ровно одной строки с количеством (0 или не ноль) SELECT COUNT(*) FROM Table
34 голосов
/ 27 января 2010

Также вы можете использовать Существует

select case when exists (select 1 from table) 
          then 'contains rows' 
          else 'doesnt contain rows' 
       end

или для проверки наличия дочерних строк для конкретной записи:

select * from Table t1
where exists(
select 1 from ChildTable t2
where t1.id = t2.parentid)

или в процедуре

if exists(select 1 from table)
begin
 -- do stuff
end
10 голосов
/ 13 августа 2015

Как сказал Другой, вы можете использовать что-то подобное:

IF NOT EXISTS (SELECT 1 FROM Table)
  BEGIN 
    --Do Something
  END 
ELSE
  BEGIN
    --Do Another Thing
  END
2 голосов
/ 15 сентября 2016

Для лучшей производительности используйте конкретное имя столбца вместо * - например:

SELECT TOP 1 <columnName> 
FROM <tableName> 

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

Кроме того, возвращение только первой строки, если есть какие-либо значения, делает это еще быстрее. На самом деле вы получили только одно значение в качестве результата - если есть какие-либо строки или нет значения, если нет строк.

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

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

1 голос
/ 27 января 2010

Разве вы не можете просто посчитать строки, используя select count(*) from table (или индексированный столбец вместо *, если важна скорость)?

Если нет, то, возможно, эта статья может указать вам правильное направление.

0 голосов
/ 08 ноября 2018

Fast:

SELECT TOP (1) CASE 
        WHEN **NOT_NULL_COLUMN** IS NULL
            THEN 'empty table'
        ELSE 'not empty table'
        END AS info
FROM **TABLE_NAME**
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...