#temporary表Microsoft SQL似乎迷路了

时间:2012-04-25 09:19:17

标签: sql-server-2008

我需要进行一些练习,我需要从视图中访问数据并在报告中将其打印出来。我创建了一个#temporary表来存储数据并将其检索并使用while循环在报告中显示它。

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

--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

然后从这一点开始,该对象被视为无效

UPDATE #temporary
SET Printed = 0
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.

为什么?

亲切的注册

2 个答案:

答案 0 :(得分:4)

不要在存储过程中使用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 :(得分:2)

在这种情况下你可以使用全局临时表(只有两个##而不是一个#)..

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

本地临时表在创建它的过程之外是不可见的。