2012-04-25 64 views
0

我有一点练习,需要从视图中访问数据并在报表中打印出来。我创建了一个#temporary表来存储数据,并使用while循环将其检索并显示在报告中。#临时表Microsoft SQL似乎迷失

问题是临时表似乎“失踪”。

--Creating my report 
USE PetShopDataBase 
CREATE PROCEDURE spPetShopReport 
@customerID INT 

SELECT * 
INTO #temporary 
FROM vwPetshop 
WHERE customerID = @customerID 
GO 

ALTER TABLE #temporary 
ADD Printed SMALLINT 
GO 

然后从这个点,当我运行的代码是

Msg 4902, Level 16, State 1, Line 2 
Cannot find the object "#temporary" because it does not exist or you do not have 
permissions. 

为什么该对象被视为无效

UPDATE #temporary 
SET Printed = 0 
GO 

错误消息我得到什么?

类regdards

+0

其中/你是如何创建临时表?你能显示TSQL代码吗? – rt2800 2012-04-25 09:22:38

回答

3

不要在存储过程中使用GO。 Go结束批处理,从而结束存储过程。

BTW方式所有这些代码可以被压缩成一个语句

SELECT * INTO #temporary 
FROM vwPetshop 
WHERE customerID = @customerID 

ALTER TABLE #temporary 
ADD Printed SMALLINT 

UPDATE #temporary 
SET Printed = 0 

试试这个:

SELECT *, CAST(0 AS SMALLINT) AS Printed 
    INTO #temporary 
FROM vwPetshop 
WHERE customerID = @customerID 
1

您可以在此情况下(##的只有两个,而不是一个#)使用全局临时表..

SELECT * 
INTO ##temporary 
FROM vwPetshop 
WHERE customerID = @customerID 

局部临时表是不可见的外部程序中,它是创建..

+0

不好主意,这些临时表可以被其他用户使用,你可以从中创建问题。 – HLGEM 2012-04-25 14:54:05

+0

确定他们可以..但问题是 - 你想达到什么.. – 2012-04-28 08:30:11