我的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中的数据根本没有更改)
以下是结果差异
您可以看到第3行的值不同,但表中的数据未更新或更改。我只是运行这个存储过程3次。
答案 0 :(得分:0)
我通过删除在DB中以某种方式创建的临时表来解决此问题。 我也删除'命令'所有查询中的命令(来自Gordon thanx)。
现在我从此SP获得了未更改的结果。
删除临时表: http://tinypic.com/view.php?pic=2q1flu8&s=8#.UzGyZPldUn4