Я реализую хранимую процедуру в SQL Server 2014 с двумя параметрами: @CLIENTID
и @CONTRACTID
.Один из параметров является необязательным, поэтому, когда хранимая процедура получает только идентификатор клиента, она должна возвращать всю информацию, относящуюся к этому клиенту, а когда она получает как идентификатор клиента, так и идентификатор контракта, она должна возвращать только информацию, связанную с этим клиентом.конкретный контракт, от этого конкретного клиента.
Вот пример кода ...
CREATE PROCEDURE SP_EXAMPLE_STACKOVERFLOW
@CLIENTID INT,
@CONTRACTID INT = NULL
AS
SELECT
*
FROM
Table T
WHERE
T.CLIENTID = @CLIENTID
AND (T.CONTRACTID = @CONTRACTID OR ISNULL(@CONTRACTID, 0) = 0)
Приведенный выше код работает, однако моей первой попыткой было сделать последнюю строку следующим образом:
AND T.CONTRACTID = ISNULL(@CONTRACTID, T.CONTRACTID)
Однакоэто не сработало ... По сути, эта последняя строка все время оценивалась как FALSE.
Я не могу понять, почему ... И я был бы признателен за помощь