簡體   English   中英

SQL Server存儲過程臨時表返回不正確的結果

[英]SQL Server Stored Procedure temp tables return incorrect results

我的SQL Server存儲過程有一個很奇怪的問題。 每當我運行此存儲過程時,它都會返回不同的結果值。 我正在使用3個臨時表,最終結果是我總結了一些列。

我不確定自己在做什么錯,這是我的存儲過程代碼:

ALTER PROCEDURE [plannabavki].[SumarnoKonta] 
    @godina1 int,
    @godina2 int,
    @godina3 int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
if OBJECT_ID('a2014s') is not null
drop table a2014s
if OBJECT_ID('a2015s') is not null
drop table a2015s
if OBJECT_ID('a2016s') is not null
drop table a2016s

--razlika = planirano-procjenjeno
create table a2014s (ktto nvarchar(30),kttonaziv nvarchar(max),planirano money,procjenjena money,razlika money)
create table a2015s (ktto nvarchar(30),kttonaziv nvarchar(max),planirano money,procjenjena money,razlika money)
create table a2016s (ktto nvarchar(30),kttonaziv nvarchar(max),planirano money,procjenjena money,razlika money)


insert into a2014s (ktto,kttonaziv,planirano,procjenjena,razlika)
select [Ktto],[KttoNaziv],sum(case when pk.NP1 is null then 0 else pk.NP1 end),sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end),sum(case when pk.NP1 is null then 0 else pk.NP1 end)-sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end) 

  FROM [dbo].[Stavke] as st
  inner join [dbo].[PlanskaKalkulacija] as pk on st.Ktto=pk.KontoId
  where Godina=@godina1 and PlanskaKalkulacija_Id=1
  group by ktto,KttoNaziv
  order by ktto

  insert into a2015s (ktto,kttonaziv,planirano,procjenjena,razlika)
select [Ktto],[KttoNaziv],sum(case when pk.NP2 is null then 0 else pk.NP2 end),sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end),sum(case when pk.NP2 is null then 0 else pk.NP2 end)-sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end) 

  FROM [dbo].[Stavke] as st
  inner join [dbo].[PlanskaKalkulacija] as pk on st.Ktto=pk.KontoId
  where Godina=@godina2 and PlanskaKalkulacija_Id=1
  group by ktto,KttoNaziv
    order by ktto

  insert into a2016s (ktto,kttonaziv,planirano,procjenjena,razlika)
select [Ktto],[KttoNaziv],sum(case when pk.NP3 is null then 0 else pk.NP3 end),sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end),sum(case when pk.NP3 is null then 0 else pk.NP3 end)-sum(case when st.[ProcjenjenaVrijednostNabavke] is null then 0 else st.[ProcjenjenaVrijednostNabavke] end) 
  FROM [dbo].[Stavke] as st
  inner join [dbo].[PlanskaKalkulacija] as pk on st.Ktto=pk.KontoId
  where Godina=@godina3 and PlanskaKalkulacija_Id=1
  group by ktto,KttoNaziv
    order by ktto

select a2014s.ktto,a2014s.kttonaziv, 
sum(case when a2014s.planirano is null then 0 else a2014s.planirano end) as 'PlaniranoI',sum(case when a2014s.procjenjena is null then 0 else a2014s.procjenjena end)as 'ProcjenjenoI',sum(case when a2014s.razlika is null then 0 else a2014s.razlika end) as 'RazlikaI',
sum(case when a2015s.planirano is null then 0 else a2015s.planirano end) as 'PlaniranoII',sum(case when a2015s.procjenjena is null then 0 else a2015s.procjenjena end)as 'ProcjenjenoII',sum(case when a2015s.razlika is null then 0 else a2015s.razlika end) as 'RazlikaII',
sum(case when a2016s.planirano is null then 0 else a2016s.planirano end) as 'PlaniranoIII',sum(case when a2016s.procjenjena is null then 0 else a2016s.procjenjena end)as 'ProcjenjenoIII',sum(case when a2016s.razlika is null then 0 else a2016s.razlika end) as 'RazlikaIII'
 from a2014s
    left join a2015s on a2014s.ktto=a2015s.ktto
    left join a2016s on a2014s.ktto=a2016s.ktto
    where a2014s.[ktto] is not null
 group by a2014s.ktto,a2014s.kttonaziv
   order by ktto

drop table a2014s
drop table a2015s
drop table a2016s

END

這是連續運行三次具有不同結果的屏幕截圖(但db中的數據完全不變)

http://tinypic.com/view.php?pic=wjgfex&s=8#.UzGf4fldUn4http://tinypic.com/view.php?pic=1z2d0uf&s=8#.UzGgQfldUn4http://tinypic.com/view.php?pic=2ut5f87&s=8#.UzGgW_ldUn4

這是結果差異

http://tinypic.com/view.php?pic=b8mnsz&s=8#.UzGqpvldUn4

您可以看到第3行的值不同,但是表中的數據沒有更新或更改。 我只運行了此存儲過程3次。

我通過刪除以某種方式在DB內部創建的這些臨時表來解決此問題。 我也刪除所有查詢中的“ order by”命令(從Gordon thanx建議)。

現在,我從此SP獲得不變的結果。

刪除的臨時表: http : //tinypic.com/view.php?pic= 2q1flu8&s =8#.UzGyZPldUn4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM