Я пишу хранимую процедуру, которая принимает 4 параметра: номер_подтверждения, номер_платы, начальный_предел, диапазон_ конечных.
Параметры являются необязательными, поэтому я проверяю таким образом номер подтверждения и номер_платыпараметры:
IF (@s_Confirmation_Number IS NOT NULL)
SET @SQL = @SQL + ' AND pd.TransactionNumber = @s_Confirmation_Number'
IF (@d_Payment_Amount IS NOT NULL)
SET @SQL = @SQL + ' AND pd.PaymentAmount = @d_Payment_Amount'
Я хотел бы попросить о помощи, потому что я не уверен, что является лучшим методом для проверки параметров диапазона дат.
Если бы кто-нибудь мог привести мне пример или несколько примеров того, как это лучше всего сделать, это было бы здорово.
Заранее спасибо.
ОБНОВЛЕНИЕ - после получения некоторой большой помощи -.
Это то, что я имею до сих пор, я следую рекомендациям scsimon, но я не уверен насчет дат, я получил идею из другого поста, который нашел, и немного игралвокруг с этим.Не могли бы вы посмотреть на это и сказать, что вы все думаете?
Большое спасибо.
@s_Confirmation_Number NVARCHAR(50) = NULL
, @d_Payment_Amount DECIMAL(18, 2) = NULL
, @d_Start_Range DATE = NULL
, @d_End_Range DATE = NULL
...
....
WHERE
ph.SourceType = @s_Source_Type
AND ((pd.TransConfirmID = @s_Confirmation_Number) OR @s_Confirmation_Number IS NULL)
AND ((pd.PaymentAmount = @d_Payment_Amount) OR @d_Payment_Amount IS NULL)
AND (((NULLIF(@d_Start_Range, '') IS NULL) OR CAST(pd.CreatedDate AS DATE) >= @d_Start_Range)
AND ((NULLIF(@d_End_Range, '') IS NULL) OR CAST(pd.CreatedDate AS DATE) <= @d_End_Range))
(параметр sourceType является жестко заданным значением)