Я работаю над хранимой процедурой, которая принимает 3 входных параметра. Первый требуется, но остальные 2 являются датами и не требуются. Я хочу, чтобы параметры даты были по умолчанию для текущего дня. Вот то, что я до сих пор:Использовать текущий день по умолчанию
USE [MyDB]
GO
/****** Object: StoredProcedure [dbo].[p_qIMO_TEST_2]
Example: exec [dbo].[p_qIMO_TEST_2] 'DS5264000001','20090101','20100101'
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('qIMO_TEST_2'))
exec('CREATE PROCEDURE [dbo].[qIMO_TEST_2] AS BEGIN SET NOCOUNT ON; END')
GO
alter PROCEDURE [dbo].[p_qIMO_TEST_2]
@i_InstrumentID VARCHAR(15) = NULL,
@i_DateLow VARCHAR(15) = '20090101',
@i_DateHigh VARCHAR(15) = '20291231'
AS
IF @i_InstrumentID IS NULL
BEGIN
PRINT 'Error: You must specify a valid Instrument ID'
RETURN
END
SELECT * FROM
(
SELECT
out_interface_id,
msg_id,
CAST(xml_msg as XML).value(
'(//InstrumentID)[1]','nvarchar(MAX)') 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
Прямо сейчас, я просто использовать произвольный диапазон дат, но это занимает много времени, чтобы вернуть результат. Ищите любые предложения, которые может предложить любой. Я использую MS SQL server 2008 r2.
Почему вы используете varchars для полей даты? Так определяется таблица? Кроме того, если это занимает много времени, вам нужно изучить это, вероятно, не проиндексировать эти поля (или они индексируются, но они не используются, потому что ваши типы данных неверны) – paulbarbin
Хороший улов. Я могу изменить его, поскольку 'date_received' является' datetime' –