У меня есть хранимая процедура, которая выбирает строку на основе идентификатора (достаточно простая), но возвращает только фактический результат, если данные удовлетворяют нескольким условиям, в противном случае он возвращает конкретные коды ошибок. Таким образом, при выполнении вложенных проверок, код будет выглядеть похож на это:Возвращение разных значений на основе выбранных данных
CREATE PROCEDURE GetStuffById
@StuffId int
AS
BEGIN
IF EXISTS (SELECT TOP 1 * FROM [Stuff] WHERE StuffId = @StuffId)
BEGIN
DECLARE @IsValid bit
SET @IsValid = (SELECT IsValid FROM [Stuff] WHERE StuffId = @StuffId)
IF @IsValid = 1
BEGIN
--More nested checks may occur here
SELECT * FROM [Stuff] WHERE StuffId = @StuffId
END
ELSE
BEGIN
RETURN -2
END
END
ELSE
BEGIN
RETURN -1
END
END
При таком подходе у меня уже есть 3 выбирает по одной и той же таблицы, что кажется излишним и неэффективным и еще один чек будет означать другой выбора и т.д. Есть лучший шаблон для этого (например, временные таблицы)?
UPDATE: отредактированный первая проверка
Зачем вам нужно различать пустую таблицу и не соответствующую строку? Выполняют ли другие проверки все значения из этой строки? –
Вы можете использовать операторы sql «CASE ..... END CASE» в одном запросе, но это зависит от того, как это сделать. – VS1
@MartinSmith Мой плохой, опустил предложение where, исправленное сейчас. И да, все проверки должны выполняться в одной строке (при условии, что она существует), но каждая проверка должна возвращать другой код ошибки. –