Это было очень озадачительно, надеюсь, кто-то может просветить меня. У меня есть сохраненный proc, который возвращает ожидаемые (по крайней мере мне) результаты, когда я запускаю его из SSMS, и он возвращает неожиданные результаты, когда я запускаю его из SQL Job. Сервер работает под управлением SQL Server 2005, не уверен в версии sp. Я могу получить это, если это поможет.Непоследовательные результаты SQL Server 2005 между SSMS и SQL-заданием
Когда я запускаю код из SSMS, только одна запись, Mon, Mar 05 :, содержит «True» для InsufficientSampleSize, как я ожидаю.
Когда я запускаю тот же код из SQL-задания, все записи содержат «True» для InsufficientSampleSize, что является неожиданным.
Есть ли что-то не так, как я оцениваю значение d.ScoreCount? Может быть, это параметр db, такой как ANSI_NULLS, который отличается от того, когда я запускаю процедуру с помощью Job? В настоящее время мои данные не содержат нулей, поэтому я не думаю, что это ANSI_NULLS.
Заранее спасибо. Я попытался переписать эту логику несколько раз, и я все еще сталкиваюсь с этой проблемой.
create table #tmpScoreData (EventDate datetime, Score int)
insert into #tmpScoreData values('20120302', 4)
insert into #tmpScoreData values('20120302', 7)
insert into #tmpScoreData values('20120302', 7)
insert into #tmpScoreData values('20120302', 2)
insert into #tmpScoreData values('20120302', 7)
insert into #tmpScoreData values('20120303', 9)
insert into #tmpScoreData values('20120303', 2)
insert into #tmpScoreData values('20120303', 4)
insert into #tmpScoreData values('20120303', 2)
insert into #tmpScoreData values('20120303', 5)
insert into #tmpScoreData values('20120304', 8)
insert into #tmpScoreData values('20120304', 8)
insert into #tmpScoreData values('20120304', 7)
insert into #tmpScoreData values('20120304', 2)
insert into #tmpScoreData values('20120304', 5)
insert into #tmpScoreData values('20120305', 7)
insert into #tmpScoreData values('20120305', 6)
insert into #tmpScoreData values('20120305', 2)
insert into #tmpScoreData values('20120306', 7)
insert into #tmpScoreData values('20120306', 2)
insert into #tmpScoreData values('20120306', 4)
insert into #tmpScoreData values('20120306', 2)
insert into #tmpScoreData values('20120306', 5)
insert into #tmpScoreData values('20120307', 5)
insert into #tmpScoreData values('20120307', 2)
insert into #tmpScoreData values('20120307', 8)
insert into #tmpScoreData values('20120307', 7)
insert into #tmpScoreData values('20120307', 5)
insert into #tmpScoreData values('20120308', 9)
insert into #tmpScoreData values('20120308', 4)
insert into #tmpScoreData values('20120308', 8)
insert into #tmpScoreData values('20120308', 3)
insert into #tmpScoreData values('20120308', 5)
declare @weekEnding datetime
set @weekEnding = '20120308'
select EventDate = cd.WeekDayAbbr + ', ' + substring(convert(varchar(10), cd.CalendarDate, 107), 1, 6) + ':',
AvgScore = d.Score,
InsufficientSampleSize = case when isnull(d.ScoreCount, 0) < 5 then 'True' end,
WeekEnding = @weekEnding
from (select 1 as ID, 'Fri' as WeekDayAbbr, @weekEnding - 6 as CalendarDate
union
select 2, 'Sat', @weekEnding - 5
union
select 3, 'Sun', @weekEnding - 4
union
select 4, 'Mon', @weekEnding - 3
union
select 5, 'Tue', @weekEnding - 2
union
select 6, 'Wed', @weekEnding - 1
union
select 7, 'Thu', @weekEnding) as cd
left join (select EventDate,
avg(convert(decimal(9,4), Score)) as Score,
count(Score) as ScoreCount
from #tmpScoreData
where EventDate <= @weekEnding
and EventDate > @weekEnding - 7
group by EventDate) as d on cd.CalendarDate = d.EventDate
order by cd.ID
drop table #tmpScoreData
Я обновил даты до менее двусмысленных значений. В моем фактическом сохраненном proc даты находятся в таблице exiting как значения datetime. Таким образом, это не является причиной моей проблемы. Благодарю.
Или еще лучше строки, которые не могут быть неверно истолкованы кем-либо, например. ''20120308'' ... –
@AaronBertrand - Я думал, что это универсально, если он также включает часть времени? И хотя он не может быть неправильно интерпретирован механизмом базы данных, многие люди все равно будут неправильно интерпретировать даты, если у них нет подсказки для проверки формата. – MatBailie
Нет, не правда. Даже '' yyyy-mm-dd'' не является универсальным без '' Thh: mm ... ''. '' yyyymmdd' - единственный формат только для даты, который, как я знаю, универсален и не может быть неверно истолкован на основе языка, даты или региональных настроек. –