Мне нравится минимизировать количество хранимых процедур, которые у меня есть, имея набор входных параметров со всеми значениями по умолчанию NULL и затем теми же параметрами, включенными в WHERE с тестом на равенство или NULL.
Насколько это неэффективно по отношению к производительности запросов - стихи пишут хранимую процедуру для 1 конкретной задачи? например Выбрать только по идентификатору пользователя, выбрать по имени пользователя / паролю, выбрать по имени / фамилии ...
Пример:
CREATE PROC dbo.up_Select_User
@UserId int = NULL
, @Username varchar(255) = NULL
, @Password varchar(255) = NULL
, @FirstName varchar(50) = NULL
, @LastName varchar(50) = NULL
, @IsActive bit = NULL
SELECT UserId, Username, FirstName, LastName, EmailAddress
FROM dbo.[User]
WHERE (UserId = @UserId OR @UserId IS NULL)
AND (Username = @Username OR @Username IS NULL)
AND (Password = @Password OR @Password IS NULL)
AND (FirstName = @FirstName OR @FirstName IS NULL)
AND (LastName = @LastName OR @LastName IS NULL)
AND (IsActive = @IsActive OR @IsActive IS NULL)
Некоторая дополнительная информация - может быть неактуальной ... Я использую Entity Framework 4 для отображения на хранимые процедуры, используя смесь обычных сущностей и сложных типов в зависимости от результатов запроса.