Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
В чем может быть проблемма:
Запускаю функцию из SQL Query Analyzer - выполняется мгновенно
Туже функцию с теми же параметрами из Vfp - минуты
26 ноя 09, 13:02    [7981915]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
саму функцию глянуть можно?
26 ноя 09, 13:04    [7981946]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Посмотрите профайлером, что в точности вызывается у Вас из vfp.
26 ноя 09, 13:05    [7981950]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
я
Guest
надо учитывать параметры соединения, например forceplan
26 ноя 09, 13:10    [7982004]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
CREATE FUNCTION Serj.fn_RepNormOt(@Id_curGeu Int, @nNbar Int, @dDtFrom DateTime, @dDtTill DateTime, @Id_Logins Int)
RETURNS @RepPokaz
Table (
nNumGeu Numeric(3,0) Null,
Id_SprHome Int,
cNameAdres VarChar(60) Null,
cHouse VarChar(10) Null,
nKorp VarChar(2) Null,
nVvod Numeric(2,0) Null,
nArea Numeric(9,2) Null,
cCtp VarChar(30) Null,
Id_SprUnitList Int,
dDtMin DateTime Null,
dDtMax DateTime Null,
nQb Numeric(9,3) Null,
nQe Numeric(9,3) Null,
nVb Numeric(9,3) Null,
nVe Numeric(9,3) Null,
nTwb Numeric(9,2) Null,
nTwe Numeric(9,2) Null,
nKoefQ Numeric(3,2) Null,
nKoefV Numeric(3,2) Null,
nKoefIzm Numeric(9,4) Null,
nDayOt Numeric(2,0) Null,
lNagr Bit,
nTb Numeric(4,2) Null,
nTe Numeric(4,2) Null,
lNormOt Bit
)
AS
BEGIN


Insert @RepPokaz
Select SprGeu.nNumGeu, SprHome.Id, SprHome.cName, SprHome.cHouse, SprHome.nKorp, SprHome.nVvod, SprHome.nArea, SprHome.cCtp,
SprUnitList.Id, Null, SprPokaz.dDt, Null, (SprPokaz.nQ1-SprPokaz.nQ2), Null, (SprPokaz.nV1-SprPokaz.nV2),
Null, SprPokaz.nTw, SprUnitList.nKoefQ, SprUnitList.nKoefV, SprIzm.nKoef, SprGeu.nDayOt, SprPokaz.lNagr, SprPokaz.nTb, SprPokaz.nTe, SprHome.lNormOt
From Serj.SprHome SprHome Inner Join (Serj.SprObject SprGeu Inner Join (Serj.SprPermission SprPermission Inner Join Serj.SprLogins SprLogins
On SprPermission.Id_Logins = SprLogins.Id And SprLogins.Id=@Id_Logins)
On SprGeu.Id = SprPermission.Id_Object)
On SprHome.Id_SprGeu=SprGeu.Id
Left Outer Join (Serj.SprUnitList SprUnitList
Inner Join Serj.SprPokaz SprPokaz On SprPokaz.Id_SprUnitList=SprUnitList.id And SprPokaz.lLiquid=0 And
SprPokaz.dDt=(Select Max(SprPokaz1.dDt)
From Serj.SprPokaz SprPokaz1
Where SprPokaz1.lLiquid=0 And
SprPokaz1.dDt BetWeen @dDtFrom And @dDtTill And
SprPokaz1.Id_SprUnitList = SprUnitList.Id)
Inner Join Serj.SprVidSyst SprVidSyst On (SprUnitList.Id_SprVidSys=SprVidSyst.Id And SprVidSyst.nKod=1)
Inner Join (Serj.SprUnit SprUnit Inner Join Serj.SprIzm SprIzm On SprUnit.Id_SprIzm=SprIzm.Id) On SprUnitList.Id_SprUnit=SprUnit.Id
Inner Join SprStatus On SprUnitList.Id_SprStatus=SprStatus.Id And (SprStatus.nKod Not In (1,2,8)))
On SprUnitList.Id_SprHome=SprHome.Id
Where (SprHome.Id_SprGeu=@Id_curGeu Or @nNbar=1)
26 ноя 09, 13:13    [7982024]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
Каряво получилось. Структура не сохранилась.
26 ноя 09, 13:15    [7982039]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
Как в виде картинки данные в форум кинуть?
26 ноя 09, 13:16    [7982045]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Korolyov_S
Каряво получилось. Структура не сохранилась.
тег SRC для этого есть
26 ноя 09, 13:17    [7982051]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
проходящий.
Guest
Korolyov_S
Как в виде картинки данные в форум кинуть?
Не надо картинки. Тэги форматирования надо использовать.
26 ноя 09, 13:17    [7982053]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Korolyov_S,

лучше сделайте функцию inline. Всё равно там ничего, кроме SELECTа нет.
26 ноя 09, 13:21    [7982083]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
это только кусок. Дальше 2 апдейта

Как ентыми тегами пользоваться?
26 ноя 09, 13:23    [7982093]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
CREATE FUNCTION Serj.fn_RepNormOt(@Id_curGeu Int, @nNbar Int, @dDtFrom DateTime, @dDtTill DateTime, @Id_Logins Int)  
RETURNS  @RepPokaz
   Table (
                         nNumGeu Numeric(3,0) Null,
                         Id_SprHome Int,
                         cNameAdres VarChar(60) Null,
                         cHouse VarChar(10) Null,
                         nKorp VarChar(2) Null,
                         nVvod Numeric(2,0) Null,
                         nArea Numeric(9,2) Null,
                         cCtp  VarChar(30) Null,
                         Id_SprUnitList Int,
                         dDtMin DateTime Null,
                         dDtMax DateTime Null,
                         nQb Numeric(9,3) Null,
                         nQe Numeric(9,3) Null,
                         nVb Numeric(9,3) Null,
                         nVe Numeric(9,3) Null,
                         nTwb Numeric(9,2) Null,
                         nTwe Numeric(9,2) Null, 
                         nKoefQ Numeric(3,2) Null,
                         nKoefV Numeric(3,2) Null,
                         nKoefIzm Numeric(9,4) Null,
                         nDayOt Numeric(2,0) Null,
                         lNagr Bit, 
                         nTb  Numeric(4,2) Null,
                         nTe  Numeric(4,2) Null, 
                         lNormOt Bit
             )
AS  
BEGIN


Insert @RepPokaz
       Select SprGeu.nNumGeu, SprHome.Id, SprHome.cName, SprHome.cHouse, SprHome.nKorp, SprHome.nVvod, SprHome.nArea, SprHome.cCtp,
                  SprUnitList.Id, Null, SprPokaz.dDt, Null, (SprPokaz.nQ1-SprPokaz.nQ2), Null, (SprPokaz.nV1-SprPokaz.nV2),
                  Null, SprPokaz.nTw, SprUnitList.nKoefQ, SprUnitList.nKoefV, SprIzm.nKoef, SprGeu.nDayOt, SprPokaz.lNagr, SprPokaz.nTb, SprPokaz.nTe, SprHome.lNormOt
        From Serj.SprHome SprHome Inner Join (Serj.SprObject SprGeu Inner Join (Serj.SprPermission SprPermission Inner Join Serj.SprLogins SprLogins
                                                                                                                                                                                   On  SprPermission.Id_Logins = SprLogins.Id And SprLogins.Id=@Id_Logins) 
                                                                                                             On SprGeu.Id = SprPermission.Id_Object)
                                                       On SprHome.Id_SprGeu=SprGeu.Id
                                                       Left Outer Join (Serj.SprUnitList SprUnitList
                                                                                        Inner Join Serj.SprPokaz SprPokaz On SprPokaz.Id_SprUnitList=SprUnitList.id And SprPokaz.lLiquid=0 And
                                                                                                                                                              SprPokaz.dDt=(Select Max(SprPokaz1.dDt)
                                                                                                                                                                                         From Serj.SprPokaz SprPokaz1
                                                                                                                                                                                      Where SprPokaz1.lLiquid=0 And
                                                                                                                                                                                                  SprPokaz1.dDt BetWeen @dDtFrom And @dDtTill And
                                                                                                                                                                                                  SprPokaz1.Id_SprUnitList = SprUnitList.Id)
                                                                                         Inner Join Serj.SprVidSyst SprVidSyst On (SprUnitList.Id_SprVidSys=SprVidSyst.Id And SprVidSyst.nKod=1)
                                                                                         Inner Join (Serj.SprUnit SprUnit Inner Join Serj.SprIzm SprIzm On SprUnit.Id_SprIzm=SprIzm.Id) On  SprUnitList.Id_SprUnit=SprUnit.Id
                                                                                         Inner Join SprStatus On SprUnitList.Id_SprStatus=SprStatus.Id And (SprStatus.nKod Not In (1,2,8))) 
                                                       On SprUnitList.Id_SprHome=SprHome.Id
          Where (SprHome.Id_SprGeu=@Id_curGeu Or @nNbar=1)

UpDate RepPokaz
       Set RepPokaz.dDtMin=SprPokaz.dDt, RepPokaz.nQb=(SprPokaz.nQ1-SprPokaz.nQ2), RepPokaz.nVb=(SprPokaz.nV1-SprPokaz.nV2),
           RepPokaz.nTwb=SprPokaz.nTw
      From @RepPokaz RepPokaz, Serj.SprPokaz SprPokaz
     Where SprPokaz.Id_SprUnitList=RepPokaz.Id_SprUnitList And SprPokaz.lLiquid=0 And
                 SprPokaz.dDt = (Select Min(SprPokaz1.dDt)
                                              From Serj.SprPokaz SprPokaz1
                                           Where SprPokaz1.Id_SprUnitList=RepPokaz.Id_SprUnitList And
                                                       SprPokaz1.lLiquid=0 And
                                                       SprPokaz1.dDt BetWeen @dDtFrom And @dDtTill) And
          RepPokaz.lNagr=0


UpDate RepPokaz
       Set RepPokaz.dDtMin=SprPokaz.dDt, RepPokaz.nQb=(SprPokaz.nQ1-SprPokaz.nQ2), RepPokaz.nVb=(SprPokaz.nV1-SprPokaz.nV2),
           RepPokaz.nTwb=SprPokaz.nTw
      From @RepPokaz RepPokaz, Serj.SprPokaz SprPokaz
     Where SprPokaz.Id_SprUnitList=RepPokaz.Id_SprUnitList And  SprPokaz.lLiquid=0 And
                 SprPokaz.dDt = (Select Max(SprPokaz1.dDt)
                                               From Serj.SprPokaz SprPokaz1
                                            Where SprPokaz1.Id_SprUnitList=RepPokaz.Id_SprUnitList And
                                                        SprPokaz1.lLiquid=0 And
                                                        SprPokaz1.lTotal=1 And
                                                        SprPokaz1.dDt<>RepPokaz.dDtMax And
                                                        SprPokaz1.dDt BetWeen @dDtFrom And @dDtTill) And
          RepPokaz.lNagr=0

Return
END


26 ноя 09, 13:25    [7982118]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Korolyov_S
это только кусок. Дальше 2 апдейта

Как ентыми тегами пользоваться?
Выделите код и нажмите кнопку SRС
По поводу UPDATEов. Что-то мне подсказывет, что все преобразования можно написать в SELECTе.
Но посмотрим, что покажете.
26 ноя 09, 13:25    [7982123]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Korolyov_S,

версия сервера какая?
26 ноя 09, 13:26    [7982133]     Ответить | Цитировать Сообщить модератору
 Re: выполнение функции  [new]
Korolyov_S
Member

Откуда:
Сообщений: 106
2000 sp2/

дело в том, что аналогичные функии выполняюся нормально.

А эта через Analizer быстро, а через ФОКс медленно, причем медленно стало только сегодня
26 ноя 09, 13:41    [7982299]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить