首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#temporary Microsoft SQL似乎迷路了

#temporary Microsoft SQL似乎迷路了
EN

Stack Overflow用户
提问于 2012-04-25 17:19:17
回答 2查看 1.7K关注 0票数 2

我有一个小练习,我需要访问视图中的数据并将其打印到报告中。我创建了一个用于存储数据的#临时表,并使用while循环检索数据并将其显示在报告中。

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

代码语言:javascript
复制
--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

则从这一点起,对象被认为是无效的

代码语言:javascript
复制
UPDATE #temporary
SET Printed = 0
GO

当我运行代码时得到的错误消息是

代码语言:javascript
复制
Msg 4902, Level 16, State 1, Line 2
Cannot find the object "#temporary" because it does not exist or you do not have 
permissions.

为什么会这样呢?

好心的记录器

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-25 22:54:28

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

顺便说一句,所有这些代码都可以压缩到一条语句中

代码语言:javascript
复制
SELECT * INTO #temporary 
FROM vwPetshop 
WHERE customerID = @customerID   

ALTER TABLE #temporary 
ADD Printed SMALLINT 

UPDATE #temporary 
SET Printed = 0 

试着这样做:

代码语言:javascript
复制
SELECT *, CAST(0 AS SMALLINT) AS Printed
  INTO #temporary 
FROM vwPetshop 
WHERE customerID = @customerID  
票数 5
EN

Stack Overflow用户

发布于 2012-04-25 17:37:38

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

代码语言:javascript
复制
SELECT *
INTO ##temporary
FROM vwPetshop
WHERE customerID = @customerID

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10312716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档