2016-06-06 7 views
0

나는 두 INSERT INTOififelse 블록, 하나의 해프닝에 문 그래서 그들은 그렇게하지 else의 다른가 저장 프로 시저를 충돌. 그러나 컴파일하는 동안 else 부분의 컴파일러에서 drop 문을 앞에두고도 '#xxx'라는 객체가 이미 있습니다.드롭 문에도 불구하고 데이터베이스에 '#xxx'라는 개체가 이미 있습니다

IF OBJECT_ID('tempdb..#xxx') IS NOT NULL 
     DROP TABLE #xxx 

    SELECT * 
    INTO #xxx 
    FROM FamilyDetails_tbl FD(NOLOCK) 

아무도 도와 줄 수 있습니까?

+3

[** This This **] (http://stackoverflow.com/questions/32112865/creating-and-deleting-temp-tables-consecutively-in-a-stored-procedure/32113000#32113000) 도움이 될 수 있습니다. –

+0

어떤 SQL 버전을 사용하고 있습니까> – Sherlock

+0

@ FelixPamittan 예, 도움이되었지만 매우 큰 절차의 일부입니다. 중간에 문제가 있습니까? – AnishaJain

답변

1

이 같은 exec 명령으로 select 문을 넣어 :

exec('SELECT * 
    INTO #xxx 
    FROM FamilyDetails_tbl FD(NOLOCK)') 
0

당신은 거래-SQL 일괄 처리 내에서 명령 문자열 또는 문자열을 cxecutes 수 있습니다. ydoow은 위에서 제시 한 바와 같이 OBJECT_ID (N'tempdb .. #의 xxx는 ')

0

는이 같은 tempdb의 앞에 "N"를 추가하려고 했 EXEC 명령을 사용하지만 특정 데이터베이스에서 EXEC 권한이없는 경우 다음과 같이 작성할 수 있습니다.

('조건') OBJECT_ID는 ('의 tempdb가 ..의 XXX')가 DROP 테이블 는 표 FROM #xxx INTO *을 선택 #xxx NULL되지 않으면 을 시작하면 WHERE '어떤 조건' END OBJECT_ID는 ('의 tempdb가 ..의 XXX')가 DROP 테이블 가 어디 어떤 조건 ' END

표 FROM #xxx INTO *을 선택 #xxx NULL되지 않으면 ELSE 을 BEGIN
0

그것은 작동 null가 아닌 경우 :

IF OBJECT_ID('tempdb..#xxx') IS NOT NULL   
    EXEC ('SELECT 1 AS Col1 INTO #xxx')   -- IF condition 
ELSE 
    EXEC ('SELECT 2 AS Col2 into #xxx')   -- ELSE condition