2016-09-15 2 views
0

Учитывая следующую хранимую процедуру, я хотел бы иметь возможность изменять параметры ввода, поэтому, если первый параметр не является допустимой датой, в качестве входа сдвигаются 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.

ответ

0

вы можете использовать функцию ISDATE, чтобы проверить, является ли первый параметр допустимой датой. Если он не используется в качестве InstrumentId. Для второго требования установите для параметра date значение по умолчанию NULL и в SP проверьте ISNULL (2ndpara), ISNULL (3rdPara). Это должно работать.

+0

Я обновил свое сообщение для большей ясности. –

+0

Обновлено мое решение. Дайте мне знать, если вам это не ясно. – Mahendra

Смежные вопросы