Код SQL, может ли он быть короче, чем у меня здесь?

#sql

#sql

Вопрос:

Мне просто интересно, как я могу просто сделать этот код короче?

 SELECT 
    MAX(ISNULL(BatchNumber, 0))   1 
FROM 
    (SELECT BatchNumber 
     FROM ExportBatch 
     UNION 
     SELECT 0)
 

Комментарии:

1. Есть ли преимущество в том, что этот SQL-запрос «короче»?

Ответ №1:

Да, это может быть короче:

 SELECT COUNT(*)   1 FROM ExportBatch;
 

db<>демонстрация скрипки

Но я бы предложил вместо этого использовать ПОСЛЕДОВАТЕЛЬНОСТЬ или ИДЕНТИФИКАТОР.

Комментарии:

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 это типичный синтаксис для такого столбца.