我有一个小练习,我需要访问视图中的数据并将其打印到报告中。我创建了一个用于存储数据的#临时表,并使用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.为什么会这样呢?
好心的记录器
发布于 2012-04-25 22:54:28
不要在存储的进程中使用GO。Go结束批处理,从而结束存储的proc。
顺便说一句,所有这些代码都可以压缩到一条语句中
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-25 17:37:38
在这种情况下,您可以使用全局临时表(只需两个##,而不是一个#)。
SELECT *
INTO ##temporary
FROM vwPetshop
WHERE customerID = @customerID本地临时表在创建它的过程之外不可见。
https://stackoverflow.com/questions/10312716
复制相似问题