Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Временные таблици MsSql и PHP


Автор: SharedNoob 9.10.2008, 08:58
Доброго времени суток.
Вот столкнулся с пока что необъяснимой проблемой. 
Из PHP вызываю хранимую процедуру в SQL2008 (SQL2000 такая же проблема, проверил), которая формирует и возвращает набор данных в PHP. Процедура данные возвращает правильно, но в PHP они не доходят.

Код процедуры:
Код

 Create table #TPRT (kodls int, namels varchar(50), optnppN int, optnppK int, pictnppn int, pictnppk int)
 Create table #TOPT (kodls int, namels varchar(50), kodopt int, nameopt varchar(30), znopt varchar(100), npp int identity(0,1))
 
 insert into #TOPT (kodls, namels, kodopt, nameopt, znopt)
    select p.kodls, p.name, ISNULL(s.kod,0), so.name, isnull(s.txt100,'Пусто')
        from LST_PROD p with(index(PK_LST_PROD))
            left join SSPRDATA s with(index(PK_SSPRDATA)) on p.KodLs=s.KodLs and s.KodSpr=17 and @Dw between s.Dwn and s.DwK
            left join SSPRDATA so with(index(IX_SSPRDATA)) on so.KodSpr=16 and so.Kod=ISNULL(s.K01,0)
        where p.KodProd=0 and @dw between p.DWN and p.DWK
            and p.LN03=1

 insert into #TPRT (kodls, namels, optnppN, optnppK)
    select t.kodls, MAX(t.namels), MIN(t.npp), MAX(t.npp)
        from #TOPT t
        group by t.kodls

select * from #TPRT        


Что характерно, если оставляю так то данные доходят:
Код

 Create table #TPRT (kodls int, namels varchar(50), optnppN int, optnppK int, pictnppn int, pictnppk int)
 Create table #TOPT (kodls int, namels varchar(50), kodopt int, nameopt varchar(30), znopt varchar(100), npp int identity(0,1))
 
 insert into #TOPT (kodls, namels, kodopt, nameopt, znopt)
    select p.kodls, p.name, ISNULL(s.kod,0), so.name, isnull(s.txt100,'Пусто')
        from LST_PROD p with(index(PK_LST_PROD))
            left join SSPRDATA s with(index(PK_SSPRDATA)) on p.KodLs=s.KodLs and s.KodSpr=17 and @Dw between s.Dwn and s.DwK
            left join SSPRDATA so with(index(IX_SSPRDATA)) on so.KodSpr=16 and so.Kod=ISNULL(s.K01,0)
        where p.KodProd=0 and @dw between p.DWN and p.DWK
            and p.LN03=1


select * from #TOPT    


кто нибудь сталкивался ? почему так ?

Автор: SharedNoob 9.10.2008, 09:33
Еще более интересная вещь, если создать временные таблицы непосредственно перед вызовом процедуры то PHP получает набор.

Процедура:
Код


alter                PROCEDURE [dbo].procname

AS Begin
 
 insert into #TOPT (kodls, namels, kodopt, nameopt, znopt)
    select p.kodls, p.name, ISNULL(s.kod,0), so.name, isnull(s.txt100,'Пусто')
        from LST_PROD p with(index(PK_LST_PROD))
            left join SSPRDATA s with(index(PK_SSPRDATA)) on p.KodLs=s.KodLs and s.KodSpr=17 and @Dw between s.Dwn and s.DwK
            left join SSPRDATA so with(index(IX_SSPRDATA)) on so.KodSpr=16 and so.Kod=ISNULL(s.K01,0)
        where p.KodProd=0 and @dw between p.DWN and p.DWK
            and p.LN03=1
 insert into #TPRT (kodls, namels, optnppN, optnppK)
    select t.kodls, MAX(t.namels), MIN(t.npp), MAX(t.npp)
        from #TOPT t
        group by t.kodls
select * from #TPRT 

END


Вызов:
Код

 Create table #TPRT (kodls int, namels varchar(50), optnppN int, optnppK int, pictnppn int, pictnppk int)
 Create table #TOPT (kodls int, namels varchar(50), kodopt int, nameopt varchar(30), znopt varchar(100), npp int identity(0,1))
 exec dbo.procname


Что же получается, нельзя создавать временные таблици в процедурах при работе с PHP ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)