【发布时间】:2014-03-25 15:29:47
【问题描述】:
我的 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
这里是运行3次不同结果的屏幕截图(但db中的数据根本没有改变)
这是结果差异
您可以看到第 3 行的值不同,但表中的数据没有更新或更改。我只运行了这个存储过程 3 次。
【问题讨论】:
-
您能解释一下结果有何不同吗?如果您编辑问题以包含您看到的两个不同的结果集,将会有所帮助。
-
请查看此链接tinypic.com/view.php?pic=b8mnsz&s=8#.UzGqpvldUn4,您将看到 3 个结果看起来任何行和值都不同,但表中没有任何变化。
-
。 .结果可能只是顺序不同。您的
order by语句不稳定,因为键可以有多行。 -
我删除了“order by”和同样的问题
标签: sql sql-server stored-procedures temp-tables