Доброго времени суток.
В прикладной программе (Ассесс 2003) было решено перевести логику на сервер
(@@version=Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 3) )
В процесе отладки обнаружился замечательный эфект, что одна и та же строка переданная через Ассесс (ADO) и запущенная в QA дают разные результаты.
Строка выглядит примерно как
автор |
exec dbo.onclick @ID = NULL, @prijmeni = NULL, @rnarozeni= NULL, @status = NULL, @praceod = Null, @pracedo = Null, @vikendy = NULL, @vyjadrschop = 100, @spismluva = 100, @preknamitek = 100, @naslou = 100, @obsahspr = 100, @dodrstandardy = 100, @komunikace = 0, @ZamE = -1, @zak = NULL, @SkupE = 0, @hwnd = 1049876, @od = {d '2008-12-01'}, @do = {d '2008-12-09'}, @chkOper = 0, @chkNaklady = -1, @groupby = 1
|
Причём наблюдение в профайлере показали, что при запуске через ADO после определённой инструкции (2ой с конца) следующая инструкция начинается (SQL:StmtStarting) но не заканчивается (не зависит от содержания этой инструкции), а все последующие инструкции игнорируются. Причём никакого сообщения об ошибке не вылетает...
Инструкция insert выглядит абсолютно нормально:
insert into telemhod.dbo.analhodsum(rok,per,zak,oper,hodin,poc_oper,mzdcena,mzdodv,konstnaklad,dovolena,RozpNakl,hwnd)
select case @groupby when 3 then 0 else datepart(yyyy,datum) end
,case @groupby when 4 then datepart(dy,Datum)
when 0 then datepart(wk,Datum)
when 1 then datepart(mm,Datum)
when 2 then datepart(yyyy,Datum)
when 3 then 0 end
,zak
,case @chkOper when 0 then NULL else zam end
,sum(hodin)
,count(distinct(zam))
,sum(mzdcena)
,sum(mzdodv)
,sum(konstnaklad)
,sum(dovolena)
,sum(RozpNakl)
,@hwnd
from telemhod.dbo.analhod where hwnd=@hwnd
group by zak
,case @chkOper when 0 then NULL else zam end
,case @groupby when 3 then 0 else datepart(yyyy,datum) end
,case @groupby when 4 then datepart(dy,Datum)
when 0 then datepart(wk,Datum)
when 1 then datepart(mm,Datum)
when 2 then datepart(yyyy,Datum)
when 3 then 0 end
,case @groupby when 3 then NULL else cena end
Причём в случае не правельного поведения профайлер выдаёт сразу SQL:Batch Complete первичной инструкции (exec) без SQL:StmtComplete.
Кто видит суслика?
П.С. Через QA всё работает без проблем, всё выполняется и перед Batch Complete (exec) проходит StmtComplete (exec)
П.П.С. Формат даты не влияет, проверял. Однако при определённых параметрах