Мне нужно посчитать строки таблицы, но мне было предложено необычное поведение count (*).
count (*) не возвращает результаты, когда я использую выбор из нескольких столбцов в пустой таблице.Но возвращает ожидаемые результаты (0 строк), если я удаляю другие столбцы из оператора выбора (Выбор одного столбца).
В приведенном ниже коде вы найдете несколько тестов, чтобы показать вам, о чем я говорю.
Структура кода ниже:
1) Создание таблицы
2) Выбор нескольких столбцов в тестах пустой таблицы, который возвращает неожиданный результатрезультаты
3) Выбор одного столбца в тесте пустой таблицы, который возвращает ожидаемый результат
4) Выбор нескольких столбцов в тесте заполненной таблицы, который возвращает ожидаемый результат
Вопрос
Учитывая эти результаты, мой вопрос:
Почему выбор из нескольких столбцов в пустой таблице не возвращает 0, а выбор из одного столбца возвращает его?
Определение ожидаемых результатов
Ожидаемые результаты для меня означают:
, если таблица пуста, count (*) возвращает 0.
Если таблица не пустая count возвращает количество строк
- CREATE TEST TABLE
CREATE TABLE #EMPTY_TABLE(
ID INT
)
DECLARE @ID INT
DECLARE @ROWS INT
- выбор нескольких столбцов с пустым столом
--assignment attempt (Multi-column SELECT)
SELECT @ID = ID, @ROWS = COUNT(*)
FROM #EMPTY_TABLE
--return Null instead of 0
SELECT @ROWS Test_01 , ISNULL(@ROWS, 1 )'IS NULL'
--Set variable with random value, just to show that not even the assignment is happening
SET @ROWS = 29
--assignment attempt (Multi-column SELECT)
SELECT @ID = ID, @ROWS = COUNT(*)
FROM #EMPTY_TABLE
--return 29 instead of 0
SELECT @ROWS Test_02
-ВЫБОР ОДНОЙ КОЛОННЫ С ПУСТЫМ СТОЛОМ
--assignment attempt (Single-column SELECT)
SELECT @ROWS = COUNT(*)
FROM #EMPTY_TABLE
--returns 0 the expected result
SELECT @ROWS Test_03
- ВЫБОР НЕСКОЛЬКО КОЛОН С НАПОЛНЕННЫМ СТОЛОМ
--insert a row
INSERT INTO #EMPTY_TABLE(ID)
SELECT 1
--assignment attempt
SELECT @ID = ID, @ROWS = COUNT(*)
FROM #EMPTY_TABLE
--Returns 1
SELECT @ROWS Test_04