2

我有一个小练习,我需要从视图中访问数据并将其打印在报告中。我创建了一个#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.

这是为什么?

亲切的问候

4

2 回答 2

5

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

顺便说一句,所有这些代码都可以压缩成一个语句

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  
于 2012-04-25T14:54:28.113 回答
3

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

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

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

于 2012-04-25T09:37:37.890 回答