У меня есть хранимая процедура, которая выбирает строку на основе идентификатора (достаточно просто), но возвращает фактический результат только в том случае, если данные удовлетворяют нескольким условиям, в противном случае она возвращает конкретные коды ошибок. Поэтому при выполнении вложенных проверок код будет выглядеть примерно так:
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 выбора на одной и той же таблице, что кажется избыточным и неэффективным, а другая проверка будет означать другой выбор и т. Д. Есть ли лучший шаблон для этого (например, временные таблицы)?
ОБНОВЛЕНИЕ: отредактированная первая проверка