Как я могу получить МАКСИМАЛЬНОЕ значение столбца из записи или 0, если ни одна запись не сопоставлена в моем ВЫБОРЕ?

#sql-server

#sql-server

Вопрос:

У меня есть хранимая процедура, которую я использую для вставки. Когда я вставляю запись, я бы хотел, чтобы значение release было на единицу больше, чем наибольшее значение. Итак, вот что я закодировал:

     DECLARE @MaxRelease int;

    SELECT @MaxRelease = max(Release)
    FROM   dbo.Test
    WHERE  TestTypeId = @TestTypeId
    AND    ExamId     = @ExamId
    AND    Title      = @Title;

    INSERT ... @MaxRelease   1 ... etc.
 

Однако как я могу сделать так, чтобы, если из ВЫБОРА ничего не возвращалось (поскольку
текущих записей нет), значение @MaxRelease было равно 0?

Ответ №1:

Вы можете использовать ISNULL (Transact-SQL) для замены нулевого значения заменяющим значением.

 SELECT @MaxRelease = isnull(max(Release), 0)
FROM   dbo.Test
 

Ответ №2:

попробуйте это

 DECLARE @MaxRelease int;

SELECT @MaxRelease = max(Release)
FROM   dbo.Test
WHERE  TestTypeId = @TestTypeId
AND    ExamId     = @ExamId
AND    Title      = @Title;

INSERT ... CASE WHEN @MaxRelease IS NULL THEN 0 ELSE @MaxRelease   1 END ... etc.
 

Ответ №3:

Присвойте @MaxRelease начальное значение, равное нулю.

 DECLARE @MaxRelease int = 0;

SELECT @MaxRelease = max(Release)
FROM   dbo.Test
WHERE  TestTypeId = @TestTypeId
AND    ExamId     = @ExamId
AND    Title      = @Title
GROUP BY TestTypeId;
 

Если из выбора ничего не возвращается, @MaxRelease не будет изменен.

Ответ №4:

Попробуйте использовать ISNULL или COALESCE

Нравится,

 SELECT @MaxRelease = isnull(max(Release),0)
FROM   dbo.Test
WHERE  TestTypeId = @TestTypeId
AND    ExamId     = @ExamId
AND    Title      = @Title;
 

или

 if @MaxRelease is null
begin
set @MaxRelease =0
end

Then Execute Insert Query here.