これは非常に困惑しています。うまくいけば誰かが私を啓発することができます。 SSMSから実行したときに期待通りの結果を返すストアドプロシージャがあり、SQLジョブから実行すると予期しない結果が返されます。サーバーはSQL Server 2005を実行していますが、spバージョンについてはわかりません。私が助けてくれればこれを得ることができます。SQL Server 2005 SSMSとSQLジョブの照合結果が一貫していません
SSMSから以下のコードを実行すると、Mon、Mar 05:、というレコードがInsufficientSampleSizeに 'True'を含むと予想されます。
SQLジョブから同じコードを実行すると、予期せぬInsufficientSampleSizeに対してすべてのレコードに 'True'が含まれます。
d.ScoreCountの値をどのように評価していますか?多分ANSI_NULLSのようなdb設定ですが、これはJobを使ってプロシージャを実行すると違うのでしょうか?私のデータには現時点ではnullが含まれていないので、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
日付をあまりあいまいな値に更新しました。私の実際のストアドプロシージャでは、日付はdatetime値としてexisingテーブルにあります。だから、これは私の問題の原因ではありません。ありがとう。
他の誰かが誤って解釈することのできない文字列。 「20120308」... –
@AaronBertrand - 時間部分も含めているのは普遍的だと思ったのですか?データベースエンジンによって誤って解釈されることはありませんが、フォーマットを確認するプロンプトが表示されない限り、多くの人間は日付を誤って解釈します。 – MatBailie
いいえ、真実ではありません。 「yyyy-mm-dd」でさえ、「Thh:mm ...」なしで普遍的ではない。 '' yyyymmdd''は私が知っている唯一の日付のみのフォーマットであり、普遍的であり、言語、日付フォーマット、または地域の設定に基づいて誤解されることはありません。 –