我需要进行一些练习,我需要从视图中访问数据并在报告中将其打印出来。我创建了一个#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.
为什么?
亲切的注册
答案 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
本地临时表在创建它的过程之外是不可见的。