SQL 서버에서 임시 테이블을 만들 때 #을 사용해야합니까?


91

#SQL 서버에서 임시 테이블을 생성하기 전에 사용해야 합니까?

예:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

ItemBack1의 경우 #기호 를 사용해야 합니까?

그렇지 않다면 #임시 테이블을 만드는 데 사용하는 것은 무엇 입니까?


3
예. # 임시 테이블을 생성합니다. 그것 없이는 테이블을 만듭니다.
Jeow Li Huan 2013

답변:


151

예. 임시 테이블을 만들려면 테이블 이름 앞에 "#"(해시)를 붙여야합니다.

나중에 테이블이 필요하지 않은 경우 계속해서 생성하십시오. 임시 테이블은 일반 테이블과 매우 유사합니다. 그러나 tempdb에서 생성됩니다. 또한 현재 세션을 통해서만 액세스 할 수 있습니다. 예를 들어 EG의 경우 : 다른 사용자가 사용자가 만든 임시 테이블에 액세스하려고하면 액세스 할 수 없습니다.

"##"(이중 해시는 다른 세션에서도 액세스 할 수있는 "전역"임시 테이블을 만듭니다.

임시 테이블의 기본 사항은 아래 링크를 참조하십시오. http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

테이블 내용이 5000 행 미만이고 nvarchar (MAX), varbinary (MAX)와 같은 데이터 유형을 포함하지 않는 경우 테이블 변수 사용을 고려하십시오.

RAM에 저장되는 다른 변수와 마찬가지로 가장 빠릅니다. RAM이 아닌 tempdb에도 저장됩니다 .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

테이블 변수에 대한 추가 정보 : http://odetocode.com/articles/365.aspx


11
SQL Server에서 SELECT 구문은 INSERT INTO @ ItemBack1입니다. SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384 2013 년

8
변수 테이블은 RAM에 저장되지 않고 tempdb에도 저장됩니다. 행 개수가 자동으로 1로 설정되고 잘못된 계획이 발생할 수 있으므로 단점 중 일부를 이해하지 않는 한 테이블 변수를 사용하지 않는 것이 좋습니다.
ConstantineK

5000 행, nvarchar (max), varbinary (max) 제한에 대한 소스를 제공 할 수 있습니까? 이것은 허용되지만 권장되지 않는 이유를 잘 모르겠습니다.
Brad

1
나도 테이블 변수가 메모리에 저장되었다고 생각했습니다. 나는 정정했다 : dba.stackexchange.com/a/16386/23720
Baodad

1
테이블 변수가 tempdb에 저장된다는 사실 만 언급하겠습니다. 나는 무지하고 달리 말하려고하는 정규직 직원과 논쟁을해야하기 위해 선임 컨설턴트로서 공동으로 걸어가는 것에 너무 지쳐서 더 많은 사람들이 주석을 읽고 거기에 머리를 붙일지도 모른다. 저는 Fortune 500 대 기업에서 수십 개가 넘는 회사에 대해 이야기하고 있습니다. 슬프게도, 질문에 대답하는이 OP가 실제로 그들의 대답을 편집하지 않는 한, 우리는이 무지가 앞으로 10 년 정도 지속될 것입니다.
Tom Stickel 2016-06-07

14

이 두 테이블의 차이점 은 첫 번째 테이블 은 영구 ItemBack1적이고 다른 테이블 #ItemBack1은 일시적이라는 것입니다.

이제 질문을 다시 살펴보면

SQL Server에서 임시 테이블을 만들 때 #을 사용해야합니까?

대답은 Yes입니다 . 이전에이 #테이블이 없으면 테이블은 임시 테이블이 아니므로 모든 세션 및 범위와 독립적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.