Запрос работает в Management Studio, но не от клиента

Вот запрос -

select  maclin,mamatn,caname,madesc,madtop,malstd,mastat,ISNULL(sum(tlchgv),0.00) as WIP,
    (select isnull(sum(blcost),0.00) from blfile where blclin = maclin and blmatn = mamatn) 
    as billed,
    isnull(rfhghq,0.00),isnull(rffixq,0.00),ISNULL(rfdate,'17770101'),cmidst
      from mafile,cafile,tlfile,rffile,cmfile where maclin=caclin and maclin*=tlclin 
      and mamatn*=tlmatn and
      maclin*=rfclin and mamatn*=rfmatn and maclin=cmclin and tlstat='' and
      maeact = 32 and maspca = 0
      group by maclin,mamatn,caname,madesc,madtop,malstd,mastat,rfhghq,rffixq,rfdate,cmidst
      order by caname,maclin,mamatn

Если я запускаю в SQL Server Management Studio, запрос выполняется за 1 секунду и возвращает 5190 строк.

Когда я запускаю точно такой же запрос из программы Visual Foxpro на рабочем столе ПК под управлением Windows XP через ODBC, запрос не возвращает ошибок, но ни одной строки!

Если я добавлю топ 5000 к запросу, он будет работать, но займет 5 минут. Если я поднимаю, чтобы выбрать топ 5200, он снова ничего не повторяет.

Используя ту же программу Visual Foxpro с SQL 2000, она работает нормально.

Самый странный. У кого-нибудь есть идеи относительно того, в чем может быть проблема?

1 ответ

Давайте посмотрим, даст ли современный синтаксис результаты, к которым вы стремитесь, не навсегда.

SELECT ma.maclin, ma.mamatn, ca.caname, ma.madesc, ma.madtop, ma.malstd, 
    WIP    = COALESCE(SUM(tl.tlchgv), 0.00),
    billed = COALESCE(SUM(bl.blcost), 0.00),
    rfhghq = COALESCE(rf.rfhghq, 0.00),
    rffixq = COALESCE(rf.rffizq, 0.00),
    rfdate = COALESCE(rf.rfdate, '17770101'),
    cm.cmidst
FROM dbo.mafile AS ma
INNER JOIN dbo.cafile AS ca
  ON ma.maclin = ca.caclin
INNER JOIN dbo.cmfile AS cm
  ON ma.maclin = cm.cmclin
LEFT OUTER JOIN dbo.tlfile AS tl
  ON ma.maclin = tl.tlclin
  AND ma.mamatn = tl.tlmatn
  AND tl.tlstat = ''
LEFT OUTER JOIN dbo.rffile AS rf
  ON ma.mamatn = rf.rfmatn
LEFT OUTER JOIN dbo.blfile AS bl
  ON bl.blclin = ma.maclin 
  AND bl.blmatn = ma.mamatn
WHERE 
   ma.maeact = 32 AND ma.maspca = 0
GROUP BY 
   ma.maclin, ma.mamatn, ca.caname, ma.madesc, ma.madtop, ma.malstd,
   COALESCE(rf.rfhghq, 0.00),
   COALESCE(rf.rffizq, 0.00),
   COALESCE(rf.rfdate, '17770101'),
   cm.cmidst
ORDER BY ca.caname, ma.maclin, ma.mamatn;
Другие вопросы по тегам