#sql
#sql
Вопрос:
Мне просто интересно, как я могу просто сделать этот код короче?
SELECT
MAX(ISNULL(BatchNumber, 0)) 1
FROM
(SELECT BatchNumber
FROM ExportBatch
UNION
SELECT 0)
Комментарии:
1. Есть ли преимущество в том, что этот SQL-запрос «короче»?
Ответ №1:
Да, это может быть короче:
SELECT COUNT(*) 1 FROM ExportBatch;
Но я бы предложил вместо этого использовать ПОСЛЕДОВАТЕЛЬНОСТЬ или ИДЕНТИФИКАТОР.
Комментарии:
1. Это зависит от того, что существует полностью бесконечная последовательность, т. Е. Ни одна строка никогда не удалялась, ни откат транзакций, которые увеличивали последовательность. Подсчет всех строк также будет медленнее, чем получение максимального значения индексированного столбца.
Ответ №2:
Я предполагаю, что вы используете подзапрос на всякий случай, если таблица пуста.
Но вам это и не нужно, потому что с помощью агрегатной функции MAX()
в вашем запросе вы всегда получите строку в результатах:
SELECT ISNULL(MAX(BatchNumber), 0) 1
FROM ExportBatch
Ответ №3:
Вы можете просто использовать:
SELECT COALESCE(MAX(BatchNumber 1, 1))
FROM ExportBatch ;
Однако вы должны использовать автоматически увеличивающийся столбец для BatchNumber
. Вы не должны назначать его вручную — identity
, autoincrement
или generated always as identity
это типичный синтаксис для такого столбца.