DateTime в условии запроса

IZU.ver.SS
Дата: 15.02.2010 09:26:24
Доброго времени суток, уважаемые специалисты...!

Простейший запрос, работает на "ура":

Declare @Number Int
Declare @Amount	Money

SET @Number=87
SET @Amount=4546

Select	count(*)
From 	BankDocument
Where 	Number=@Number 
	AND Amount=@Amount
	AND StatusId=2
	AND StatusDateTime>'02/12/2010'

Но стоит добавить переменную @Date, чтобы подставить в условие StatusDateTime... и время выполнения запроса многократно увеличивается... доходит до 40 секунд, после чего я его принудительно останавливаю:

Declare @Number Int
Declare @Amount	Money
Declare @Date DateTime

SET @Number=87
SET @Amount=4546
SET @Date=DateAdd("d",-1,GetDate())

Select	count(*)
From 	BankDocument
Where 	Number=@Number 
	AND Amount=@Amount
	AND StatusId=2
	AND StatusDateTime>@Date

Также пробовал варианты:

@Date=CAST(CAST(Month(GetDate()) AS VarChar(2)) + '.' + CAST(Day(GetDate()-1) AS VarChar(2)) + '.' + CAST(Year(GetDate()) AS VarChar(4)) AS SmallDateTime)
и 
Declare @Date VarChar(100)
SET @Date=CONVERT(VarChar,DateAdd("d",-1,GetDate()), 101)

Задача же в том чтобы получить похожие записи за последнее время, с целью исключения повторений

П.С.: Версия: Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)

Заранее благодарен... а пока жду ответа буду дальше его мучить )))
IZU.ver.SS
Дата: 15.02.2010 09:44:16
tpg
http://www.sql.ru/articles/mssql/2005/070704TechniqueForEnsuringPlanStabilityInSQLServer2000.shtml


Прочитал, весьма интересно и полезно, но не понял как это может быть применено ко мне, ведь дата постоянно разная... а количество записей на каждый день практически постоянно

Тем более до этого сколько не писал запросы подобного типа, все работало отлично...
--__Александр__--
Дата: 15.02.2010 10:00:30
Добавте хинт OPTION(RECOMPILE)
-----------------
open your mind
IZU.ver.SS
Дата: 15.02.2010 10:02:54
IZU.ver.SS
tpg
http://www.sql.ru/articles/mssql/2005/070704TechniqueForEnsuringPlanStabilityInSQLServer2000.shtml


Прочитал, весьма интересно и полезно, но не понял как это может быть применено ко мне, ведь дата постоянно разная... а количество записей на каждый день практически постоянно

Тем более до этого сколько не писал запросы подобного типа, все работало отлично...


Странно, но вот так заработало... все-таки помогла Ваша статья, извиняюсь за первоначальное заблуждение:

CREATE PROCEDURE [dbo].[sp_TBSGetBankDocumentExist] 

@Number 	Int,
@Amount	Money,
@Date		DateTime = '12.02.2010'

AS

SET @Date=DateAdd(d,-4,GetDate())

Select	count(*)
From 	BankDocument
Where 	Number=@Number 
	AND Amount=@Amount
	AND StatusId=2
	AND StatusDateTime>@Date

... хм... но все же до меня не совсем доходит... а без входящего параметра @Date ни как не обойтись в данном случае?
Crimean
Дата: 15.02.2010 10:08:38
> Странно, но вот так заработало...
> а без входящего параметра @Date ни как не обойтись в данном случае?

плохо, что еще непонятно. смысл как раз именно в указании "удачного" значения для параметра. без него толку не будет. корень зла - в природе оптимизатора MS
IZU.ver.SS
Дата: 15.02.2010 10:22:06
Crimean
> Странно, но вот так заработало...
> а без входящего параметра @Date ни как не обойтись в данном случае?

плохо, что еще непонятно. смысл как раз именно в указании "удачного" значения для параметра. без него толку не будет. корень зла - в природе оптимизатора MS


В таком случае если все параметры из Where продублировать в определении входящих параметров, то мы получим максимально быстрое выполнение запроса?
Crimean
Дата: 15.02.2010 10:23:15
2 IZU.ver.SS

вы делаете выводы, не изучив саму проблему :)
конечно, в частном случае ваши выводы верны. но далеко не всегда
IZU.ver.SS
Дата: 15.02.2010 10:34:05
Crimean
2 IZU.ver.SS

вы делаете выводы, не изучив саму проблему :)
конечно, в частном случае ваши выводы верны. но далеко не всегда


Разберемся... ;)

На данный момент все работает...
Всем Огромное Спасибо!
tpg
Дата: 15.02.2010 10:49:36
IZU.ver.SS
@Date		DateTime = '12.02.2010'
Только, чтобы не "нарваться" на языковые установки - http://www.sql.ru/faq/faq_topic.aspx?fid=109