鉴于以下存储过程,我希望能够移动我的输入参数,因此如果第一个参数不是有效日期,则其他两个日期参数将作为输入进行移位。如果没有输入参数到我的存储过程,我也想要使用当天。什么是最好的方式来做到这一点?我正在使用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,我想检查下一个参数是否在那里。如果有,请检查是否有第三个参数。这表明所有3个参数都在那里,所以我知道这是一个有效的InstrumentID,其开始和结束日期。如果只有一个有效的第一个参数,我希望它使用第二个和第三个参数的当前日期。我知道这很复杂,但这就是我被要求做的事情。没有前端应用程序,所以我必须在T-SQL存储过程中执行此操作。
为了更加清晰,我更新了我的帖子。 –
更新了我的解决方案。如果你不清楚,请告诉我。 – Mahendra