我收到以下消息
无效的对象名称#Volume
在具有以下代码的存储过程的备用运行上。如果twoBD列值<&lt; 48那么它将在TAT列中显示Met。而在第二列中,BD值如下所示
00:20,
00:40
Create PROCEDURE [dbo].[gsktat]
(
@startdate datetime,
@enddate datetime
)
AS
BEGIN
SET ANSI_WARNINGS OFF
create table #volume (Sdate datetime,edate datetime ,vstatus varchar(50)
,twoBD varchar(50),TAT varchar(50),ageing int)
insert into #volume(Sdate,edate,vstatus,twoBD)
(select [Start date],[End date],[Status],dbo.[GetWorkingMinss]([Start date],[End date],'ss') from GSK)
Declare @claimid int
set @claimid = '48'
If Exists (Select * from #volume where
(SELECT
RIGHT('00'+CONVERT(VARCHAR(10),( ((cast(STR(Floor(REPLACE(twoBD,':','.')),8,0)as int)*60+CAST(Right(00.45,2) as int)))%3600)/60),2)
+':'
+ RIGHT('00'+CONVERT(VARCHAR(10), ((cast(STR(Floor(REPLACE(twoBD,':','.')),8,0)as int)*60+CAST(Right(00.45,2) as int)))%60),2) AS [ TAT]
)<= @claimid)
begin
insert into #volume(TAT)values('Met')
end
else
begin
insert into #volume(TAT)values('Not Met')
select * from #volume
end
end
答案 0 :(得分:1)
如果你要找一个名为#volume的临时表,你必须先创建它。必须在每次使用时完成,因为它是临时的。
由于您没有显示其余代码,因此无法告诉您如何修复它。
添加您现在发布的proc代码
我实际上没有在您的代码中发现问题,无法确定表格,GetWorkingMins()等是否有问题,但不知道这些会导致丢失#volume message。
但我确实看到了一些奇怪的东西。你说错误信息是&#34;无效的对象名称#Volume&#34;但我很确定SQL服务器不会在错误消息中将 #volume 更改为 #Volume - 只是在本地尝试(2005)但事实并非如此。让我想知道你是否还有其他版本的这个proc你实际上正在调用 - sql目录也可能会混淆,所以它可能不是你的代码导致问题,虽然这是一个罕见的问题。在proc的顶部添加一个打印或其他方法,以确保您调用的内容与您认为的内容相同。
另一种可能性是消息可能来自导致奇怪的内部存储过程。尝试在gskstat()中将#volume更改为#myvolume并查看错误消息是否更改
在proc的顶部创建#volume对于调试它是一件好事。在这种情况下,生命周期很明确,#volume将在proc结束时消失。即使调用proc或客户端连接也创建#volume gskstat()也不应该有任何问题(sql将创建第二个#volume表(具有不同的隐藏表名后缀)