2012-10-19 6 views
-1

선택 쿼리에서 임시 테이블을 생성하려고합니다 (내 테이블에 많은 열이 있으므로 수동으로 임시 테이블을 만들지 않습니다). 다음을 사용합니다. 쿼리 :결과가 비어있는 경우 select 쿼리에서 임시 테이블을 만들 수 없습니다.

SELECT * INTO #TempTable 
FROM MyTable 
WHERE ... 

이 쿼리가 빈 행을 반환하면 #TempTable이 생성되지 않습니다. 따라서 다음 쿼리에는이 #TempTable을 사용할 수 없습니다.

해결 방법이 있습니까?

+0

,이 만들 것임을 주목 경우

SELECT * INTO #TempTable FROM MyTable WHERE ... 

가 빈 테이블을 생성합니다 임시 테이블. –

답변

1

당신이 게시 코드에서 쿼리 SELECT * FROM MyTable WHERE ... 경우

SELECT * 
INTO TempTable 
FROM MyTable WHERE ... 

에 행을 반환, 그것은 것이다TempTable을 만들 수 있지만이 경우는 거기에 데이터를 기입하지 않습니다 행이 WHERE 절과 일치했습니다. 그러나 적어도 MyTable과 동일한 구조의 테이블 TempTable을 만들어야하며이 테이블은 비어 있습니다.

예를이를 위해 : 술어 1 <> 1는 항상 false이기 때문에

SELECT * INTO TempTable FROM MyTable WHERE 1 <> 1; 

항상 MyTable와 같은 구조로 빈 테이블 TempTable을 만듭니다.

그러나 당신과 같이 선언 할 수 있습니다

DECLARE @Temp TABLE(Field1 int, ...); 
+3

테이블 변수로 선택할 수 없기 때문에 이것은 오타라고 가정합니다. "SELECT * INTO @TempTable From MyTable WHERE 1 <> 1;" "@TempTable '근처의 구문이 잘못되었습니다." – brian

+0

@brian - 죄송합니다, 예, 지금은 오타가 있습니다. 테이블 변수가 아닌 테이블 이름을 의미했습니다. –

0

이 동적으로 생성하고 임시 테이블을 채우는과 같은 시나리오를 explicitly.In를 생성하지 않기 때문에, 당신은에있는 임시 테이블의 존재를 확인해야합니다 당신이 창조하기 전에 시작.

이 시도 :

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL 
BEGIN 
    DROP TABLE #TempTable 
END 

SELECT * INTO #TempTable FROM MyTable 
Select * From #TempTable 
0

쿼리 오류가 없다면 선택 반환하지 행이 내 경험에

관련 문제