0

これは私のコードです

create proc TEMP
    AS
    BEGIN
    DECLARE @SQL nvarchar(4000)
    IF OBJECT_ID(N'tempdb..#TEMP1') IS NOT NULL
        DROP TABLE #TEMP1;
    SET @SQL ='SELECT CUSTOMERS,AREA,HOUSEHOLDS'+CHAR(10)
    SET @SQL = @SQL +'INTO #TEMP1'+CHAR(10)
    SET @SQL = @SQL +'FROM NEW'+CHAR(10)
    PRINT(@SQL)
    EXEC (@SQL)
    IF OBJECT_ID(N'tempdb..#TEMP2') IS NOT NULL
        DROP TABLE #TEMP2;
    SET @SQL ='SELECT CUSTOMERS,AREA,VEHICELS'+CHAR(10)
    SET @SQL = @SQL +'INTO #TEMP2'+CHAR(10)
    SET @SQL = @SQL +'FROM OLD'+CHAR(10)
    PRINT(@SQL)
    EXEC (@SQL)
    IF OBJECT_ID(N'tempdb..#TEMP3') IS NOT NULL
        DROP TABLE #TEMP3;
    SET @SQL ='SELECT 0.VEHICELS,C.HOUSEHOLDS'+CHAR(10)
    SET @SQL = @SQL +'INTO #TEMP3'+CHAR(10)
    SET @SQL = @SQL +'FROM #TEMP1 C'+CHAR(10)
    SET @SQL = @SQL +'INNER JOIN #TEMP2 O '+CHAR(10)
    SET @SQL = @SQL +'on C.CUSTOMERS=O.CUSTOMERS'+CHAR(10)
    SET @SQL = @SQL +'AND C.AREA=O.AREA'+CHAR(10)
    PRINT(@SQL)
    EXEC (@SQL)
    END

私のエラー:

Msg 208, Level 16, State 0, Line 1
Invalid object name '#TEMP1'.

まず TEMP1 と TEMP2 はうまく動いているが、TEMP3 になるとデータが存在する TEMP1 にアクセスしない

この紛らわしい問題を確認できますか???

DECLARE @sql varchar(max)
SET @sql = 'CREATE TABLE ##T1 (Col1 varchar(20))'
EXEC(@sql)
INSERT INTO ##T1 (Col1) VALUES ('This will work.')
SELECT * FROM ##T1

GLOBALTEMPORARY TABLESを使用すると、将来的に問題が発生しますか???

4

2 に答える 2