Я ищу самое чистое решение здесь.
Я хотел бы закодировать хранимую процедуру, которая должна извлекать одну запись, если при вводе введен правильный ключ, или все записи, если она вызывается без параметра.
Таблица FOO имеет два поля: КОД и ОПИСАНИЕ.
В Sql server 2008 я обычно создаю хранимую процедуру следующим образом:
CREATE PROCEDURE getFoo
@CODE CHAR(3)=NULL
AS
IF @CODE is NULL
BEGIN
SELECT CODE,DESCRIPTION FROM FOO
END
ELSE
BEGIN
SELECT CODE,DESCRIPTION FROM FOO WHERE CODE=@CODE
END
GO
Основная проблема с моим решением - это, очевидно, повторение SELECT, которое может быть болезненным, если в таблице много полей или много объединений с другими таблицами.
Другой подход, который я вижу в других SP:
CREATE PROCEDURE getFoo
@CODE CHAR(3)=NULL
AS
DECLARE @FILTER CHAR(3)
SET NOCOUNT ON
IF @CODE is NULL SET @Filtro='%'
ELSE SET @FILTER =@CODE
SELECT CODE,DESCRIPTION
FROM FOO
WHERE
CODE like @FILTER
GO
Какой код вы предпочитаете для этой простой задачи?
Вы строите это динамически и в конце используете EXECUTE?
спасибо