#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 не будет изменен.