Я осмотрелся и нашел различные подходы к этой проблеме, но ни один из них не работал в моей конкретной ситуации. Я написал хранимую процедуру, которую использую для отчета SSRS, которая учитывает необязательные параметры (в SSRS я указываю список доступных параметров вместе с параметром «Все», где значение установлено на «= Ничего» ). Это работает для размещения нескольких необязательных параметров, когда, если ничего не выбрано, отображаются все записи... кроме тех, у которых значения ProjectID равны нулю.
Я хотел бы иметь возможность запустить хранимую процедуру и указать «Null» для параметра @Project и показать эти значения с нулевыми полями ProjectID, и в идеале добавить параметр «Нет» в мой отчет SSRS для этого параметра, который также покажет эти значения.
Я не совсем уверен, как изменить SP для достижения этого:
ALTER PROCEDURE [dbo].[TasksByStatus]
@Status AS Integer = NULL,
@Project AS Integer = NULL
AS
BEGIN
SELECT Task, CONVERT(VARCHAR, StartDate, 101) AS StartDate,
(CASE WHEN CompleteDate IS NULL THEN 'Not complete yet'
ELSE CONVERT(VARCHAR, CompleteDate, 101) END) AS CompleteDate,
(CASE WHEN Notes IS NULL THEN 'No notes provided' ELSE Notes END) AS Notes,
ProjectName, StatusName
FROM Tasks
INNER JOIN Status ON Tasks.StatusID = Status.ID
LEFT JOIN Projects ON Tasks.ProjectID = Projects.ID
AND Projects.ID IS NULL
WHERE Status.ID = ISNULL(@Status, Status.ID)
AND Projects.ID = ISNULL(@Project, Projects.ID)
ORDER BY StartDate, StatusName
END
Результаты запроса без указания параметров:
Я намерен при указании NULL для @Project видеть только одну запись со значением NULL ProjectID.
Изменить для дальнейшего уточнения
Для OP, пожалуйста, сообщите нам, какими должны быть точные результаты для каждой строки в данной таблице. Кроме того, когда вы упоминаете «Нет», как бы вы хотели передать это хранимой процедуре? (Переменная @Project определена как целое число)
Parameter Projects.ID In Result
-----------------------------------------
1 1 Yes
1 2 No
1 NULL No
'None' 1 No
'None' 2 No
'None' NULL Yes
NULL 1 Yes
NULL 2 Yes
NULL NULL Yes
AND Projects.ID IS NULL
, так иAND Projects.ID = ISNULL(@Project, Projects.ID)
. Разве это не противоречиво? - person ruakh   schedule 08.03.2012