2017-06-07 34 views
1

SQL Serverのテンポラリテーブルにロードするテーブルが2つあります。無効なオブジェクト名##グローバルテンポラリテーブルを作成するときの一時エラー

私はテーブルからデータを取得するストアドプロシージャを作成しています。次に、グローバル・テンポラリ・テーブルを作成し、ストアド・プロシージャの結果をそこに挿入します。私はこのエラー 「無効なオブジェクト名##のTemp」

を取得し、一時テーブルからデータを選択しようとしているが

それがグローバル一時表であれば、なぜ私はこのエラーを取得していますか?

DROP PROCEDURE usp_GetEmp 
GO 
CREATE PROCEDURE usp_GetEmp 
AS 
BEGIN 
    SELECT table1.id AS Id 
     , table2.data AS table2_value 
    FROM table1 INNER JOIN table2 
    ON table1.id = table2.table1_id 
    WHERE table2.data = 1 
END 

    CREATE TABLE ##Temp 
    (Id Int 
    , Value varchar(50)) 

    INSERT INTO ##Temp 
    EXEC usp_GetEmp 
    GO 

    SELECT * 
    FROM ##Temp 
+3

グローバル一時テーブルだ試しは何かが少しデザインと離れているというサインです。それらには並行性とスコープの問題があります。あなたはそこにGOを持っていますか?それ以外の場合、create tableなどはすべてプロシージャ内にあります。 –

+0

うわーが問題だった。もともとグローバルな一時テーブルは持っていませんでしたが、エラーではないと仮定していましたので、グローバルな範囲に変更しました。もはやグローバルではなく、機能します。ありがとう! –

+0

あなたのストアドプロシージャには、 'GO'ステートメントがあるために' Create Table'ステートメントと 'Insert Into'ステートメントが含まれています。以下の@Fabianoへの寄付。私は今まで彼の答えを見ていませんでした。 –

答えて

2

それは

DROP PROCEDURE USP_GETEMP 
GO 
CREATE PROCEDURE USP_GETEMP 
AS 
BEGIN 
SELECT 
    TABLE1.ID AS ID 
    ,TABLE2.DATA AS TABLE2_VALUE 
FROM TABLE1 INNER JOIN TABLE2 
ON TABLE1.ID = TABLE2.TABLE1_ID 
WHERE TABLE2.DATA = 1 
END 
GO 

IF OBJECT_ID('TEMPDB.DBO.##TEMP') IS NOT NULL 
DROP TABLE ##TEMP 
GO 
CREATE TABLE ##TEMP 
(ID INT 
, VALUE VARCHAR(50)) 

INSERT INTO ##TEMP 
EXEC USP_GETEMP 
GO 

SELECT * 
FROM ##TEMP 
関連する問題