为什么#temptable而不是@tempTable导致超时错误?

时间:2017-01-25 16:37:28

标签: sql-server sql-server-2008 reporting-services ssrs-2008 ssrs-2008-r2

我在SQL Server 2008中有一个名为myStoredProcedure的存储过程,包括如下代码块:

...
declare @tempTable table
(
   Id int,
   Name varchar(100),
   Category varchar(50),
   Volume int
)

while @startTime<@endTime
begin
   insert into @tempTable
   EXEC R52_Calculations @param1, @param2, @param3

   set @startTime = DATEADD(YEAR,1,@startTime)
end

select * from @tempTable

通过这种方式,存储过程运行良好。我可以在SSRS 2008中连接到此存储过程的表,而不会发出任何警告或错误。但是,当我将@tempTable变量更改为#tempTable时,我尝试将SSRS 2008上的表连接到更新的存储过程时收到TimeOut错误,即使存储过程工作正常再次在SQL Server中。

...
create table #tempTable
(
   Id int,
   Name varchar(100),
   Category varchar(50),
   Volume int
)

while @startTime<@endTime
begin
   insert into #tempTable
   EXEC R52_Calculations @param1, @param2, @param3

   set @startTime = DATEADD(YEAR,1,@startTime)
end

select * from #tempTable

这是错误:

  

超时已过期。完成之前已经过了超时时间   操作或服务器没有响应。警告:空值是   通过聚合或其他SET操作消除。

更多要点:

  1. 当我删除&#34;而#34;循环并只执行一次该过程,当我使用#tempTable时没有发生错误。

  2. 如果我使用@temptable(变量1),则根本不会发生错误。

  3. 请注意,两个查询在SQL Server中都运行正常,当我尝试将SSRS 2008上的表连接到存储过程时发生错误 。

    我找不到#temptable导致错误的原因。任何线索或帮助,我将不胜感激。感谢。

0 个答案:

没有答案