2016-09-13 2 views
2

내가 검색 및 SQL Server에서 임시 테이블에 대한 this article을 발견했습니다 INTO 나는 우리의 저장 프로 시저 중 하나의 라인을 충족했기 때문에 말을 SELECT :임시 테이블 : CREATE 대

SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';') 

내가 알고 #SomeTable 임시 테이블로 tempdb에 저장됩니다. 그러나, 내가 언급 한 글에서 처음으로 CREATE TABLE #SomeTable을 쓸 필요가없는 이유를 이해하지 못한다. 우리 코드가 잘 작동하고 있는데, 왜 단지 SELECT ... INTO #SomeTable 만 사용하면되는지 모르겠다. 처음에 CREATE TABLE #SomeTable을 추가하면 어떻게됩니까? 실적에 차이가 있습니까? 테이블을 다른 위치에 보관 하시겠습니까?

+3

그 구문을 생성하고 온건 한 번에 채우는 명시 적으로하기 때문에 : [표] 문에 선택 ... 다음 스크립트로 테이블 상당을 만들기 때문에

Select 'Bob' as First_Name , 'Smith' as Last_Name Into #tempTable; Insert into #tempTable Select 'Christopher' as First_Name , 'Brown' as Last_Name; 

스크립트가 실패합니다. 먼저 범위를 만들도록 선택할 수 있지만 insert 문은'insert into #temp select .... '로 변경해야합니다. 근본적으로 대답은이다. 왜냐하면 SELECT INTO는 임시 테이블을 생성하지만 INSERT INTO는 생성하지 않기 때문입니다. * (추신 : 처음에 테이블을 만들면 기본 키 등을 지정하고 SELECT INTO를 사용할 수 없으므로 INSERT INTO로 변경해야합니다.) * – MatBailie

+0

@MatBailie 이것은 내가 요청한 것입니다 . 질문을 닫을 수 있도록 답변으로 게시하십시오. –

답변

4

Select ... into [table]은 Select 문에서 생성 된 데이터 집합의 속성을 사용하여 임시 테이블을 만든 다음 테이블을 채 웁니다.

[테이블]에 Select ...를 사용하는 대신 Create Table 문 뒤에 Insert Into 문을 사용하는 방법이 있습니다. 명시 적으로 테이블을 생성하면 더 많은 제어와 정밀성을 제공합니다.

[테이블]에 선택 ...을 사용하는 것이 생각처럼 들리 겠지만 [테이블]에 선택 ...이 문제가 될 수있는 상황이 있습니다. 예를 들어 임시 테이블을 만들고 나중에 추가 행을 삽입 할 때 Select ... into [Table] 구문을 사용하면 특히 문자열 기반 및 nullable 필드에서 문제가 발생할 수 있습니다.

[Tabl]에 대한 선택 ...의 제한 사항의 예로, 아래 스크립트는 First_Name 및 Last_Name의 두 필드가있는 임시 테이블을 만듭니다. 그런 다음 Insert 문은 임시 테이블에 다른 레코드를 추가하려고 시도하지만 값이 잘 리면 실패합니다.

Create Table #tempTable (
    First_Name varchar(3) Not Null 
    Last_Name varchar(5) Not Null 
);