Учитывая следующую хранимую процедуру, я хотел бы иметь возможность изменять параметры ввода, поэтому, если первый параметр не является допустимой датой, в качестве входа сдвигаются 2 других параметра, которые являются датами. Я также хочу, чтобы текущий день использовался, если в моей хранимой процедуре нет входных параметров. Каков наилучший способ сделать это? Я использую SQL Server 2008 r2.Параметры ввода сдвига
Create PROCEDURE [dbo].[p_qIMO_TEST_2]
@i_InstrumentID VARCHAR(15) = NULL,
@i_DateLow DATETIME = '20090101',
@i_DateHigh DATETIME = '20291231'
AS
IF @i_DateLow IS NULL SET @i_DateLow = CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
IF @i_DateHigh IS NULL SET @i_DateHigh = CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
SELECT * FROM
(
SELECT
out_interface_id,
msg_id,
CAST(xml_msg as XML).value(
'(//InstrumentID)[1]','nvarchar(15)') AS InstrumentID,
msg_type,
xml_msg,
CAST(xml_msg AS XML) as [Quick_XML],
date_received,
status,
last_modified,
environment,
transaction_closed_date
FROM MyTable
WHERE msg_type IN ('ABC','DEF')
AND date_received >= @i_DateLow
AND date_received < DATEADD(DAY,1,@i_DateHigh) -- Need to add 1 to the DateHigh for
-- date range criteria to work properly (>= and <)
) x
WHERE (x.InstrumentID = @i_InstrumentID OR x.InstrumentID = NULL)
ORDER BY date_received DESC
RETURN
GO
Обновление для большей ясности
В принципе, я хочу, чтобы это проверить, если первый аргумент является действительной датой, возможно, с использованием IsDate()
и если это не является допустимой датой, то я знаю его является InstrumentID. Если это InstrumentID, я хочу проверить, есть ли следующий аргумент. Если он есть, проверьте, есть ли третий аргумент. Это означало бы, что все три аргумента существуют, поэтому я знаю, что это действительный InstrumentID с датами начала и окончания. Если есть только допустимый первый аргумент, я хочу, чтобы он использовал текущую дату для 2-го и 3-го аргументов. Я знаю, что это запутанно, но это то, о чем меня просили. Нет приложения для внешнего интерфейса, поэтому я должен сделать это в хранимой процедуре T-SQL.
Я обновил свое сообщение для большей ясности. –
Обновлено мое решение. Дайте мне знать, если вам это не ясно. – Mahendra