2011-09-27 2 views
0
DECLARE @tmp_tab VARCHAR(20) 
SELECT @TMP_TAB = '#TMP_TAB_BANK' + CAST(USER_ID(USER) AS NVARCHAR) 
            + CAST(@@SPID AS NVARCHAR) 

EXEC('CREATE TABLE ' + @TMP_TAB + (ID INT NULL, NAME VARCHAR NULL)') 

//Break point 

EXEC('select * from ' + @TMP_TAB) 

저는 SQL Server 2005에서 작업하고 있습니다. 위의 코드에서 임시 테이블 이름을 결정합니다. 그런 다음 임시 테이블을 만듭니다. 이 코드 만 실행하면 Commands completed successfully 메시지가 수신됩니다.성공적으로 만든 #temp 테이블에서 선택할 수 없습니다

그러나 나는

잘못된 개체 이름 '# TMP_TAB_BANK157'

왜 할 수없는 데이터를 검색하는 코드 (물론, 나는 그것이 빈 것을 알고) 내가 얻을의 마지막 줄을 실행할 경우 방금 만든 테이블에서 레코드를 가져 옵니까? 임시 테이블이 작성되지 않은 경우 경고 메시지가 표시되지 않는 이유는 무엇입니까?

답변

3

#TEMP 테이블은 만든 컨텍스트에서만 사용할 수 있습니다. 하나의 spid 또는 연결에 #temp1을 만들면 다른 범위 (자식 범위 제외)에서 액세스 할 수 없습니다.

동적 SQL에 #TEMP 테이블을 만드는 경우 동일한 범위에서 테이블을 선택해야합니다.

대안은 다음과 같습니다 자신의 위험을

  • ##GLOBAL 임시 테이블.
  • 실제 테이블
관련 문제