Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server存储过程临时表返回不正确的结果_Sql_Sql Server_Stored Procedures_Temp Tables - Fatal编程技术网

SQL Server存储过程临时表返回不正确的结果

SQL Server存储过程临时表返回不正确的结果,sql,sql-server,stored-procedures,temp-tables,Sql,Sql Server,Stored Procedures,Temp Tables,我的SQL Server存储过程有一个非常奇怪的问题。每次运行此存储过程时,它都会返回不同的结果值。我使用了3个临时表,最后总结了一些列 我不确定我做错了什么,以下是我的存储过程代码: ALTER PROCEDURE [plannabavki].[SumarnoKonta] @godina1 int, @godina2 int, @godina3 int AS BEGIN -- SET NOCOUNT ON added to prevent extra resu

我的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行的值不同,但表中的数据不会更新或更改。我只运行了3次这个存储过程。

我通过删除数据库中创建的临时表解决了这个问题。 我还删除了所有查询中的“orderby”命令(来自Gordon thanx的建议)

现在,我从该SP获得未更改的结果

删除的临时表:

你能解释一下结果有什么不同吗?如果您将问题编辑为包含您看到的两个不同的结果集,这将有所帮助。请检查此链接,您将看到3个结果。任何行和值都不同,但表中没有任何更改。结果可能只是顺序不同而已。您的
order by
语句不稳定,因为键可能有多行。我删除了“order by”和相同的问题