2

ビューからデータにアクセスしてレポートに印刷する必要があるというちょっとした演習があります。データを格納するための#temporaryテーブルと、データを取得してwhileループを使用してレポートに表示するための#temporaryテーブルを作成しました。

問題は、一時テーブルが「欠落」しているように見えることです。

--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 はバッチを終了し、ストアド プロシージャを終了します。

ところで、このコードはすべて 1 つのステートメントに圧縮できます。

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

この場合、グローバル一時テーブルを使用できます(1つの#ではなく2つの##のみ)。

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

ローカル一時テーブルは、それが作成されたプロシージャの外部には表示されません。

于 2012-04-25T09:37:37.890 に答える