2011-04-13 2 views
88

스크립트 (저장 프로 시저 아님)에 테이블 변수가 있습니다. 두 가지 질문 :SQL-Server에서 테이블 변수를 삭제하는 방법은 무엇입니까? 나는 이것을해야 할까?

  1. 어떻게 테이블 변수를 삭제합니까? Drop Table @varName에 "잘못된 snytax"오류가 발생합니다.
  2. 언제나해야합니까? 좋은 습관이라고 들었어. 이런 작은 스크립트에 정말 필요합니까?

여기 내 코드입니다 :

Declare @projectList table(
    name varchar(40) NOT NULL); 

Insert Into @projectList 
Values ('BCR-00021') 

Select * 
From @projectList 

Drop Table @projectList -- does not work 
+0

당신은 너무 그들에게 자신을 삭제할 수 없습니다 질문의 두 번째 부분은 적용되지 않습니다. –

답변

136

테이블 변수는 자동으로 로컬과 자동으로 삭제 - 당신이 그것에 대해 걱정할 필요가 없습니다.

+14

+1 - 또한 ** 원하는 경우에도 ** 드롭 할 수 없습니다. 다른 변수와 마찬가지로 세션이 열려있는 한 계속 유지됩니다. 또한 거래에 영향을받지 않습니다. – JNK

+8

트랜잭션에 의해 영향을받지 않는 것에 대한 @JNK 포인트가 중요합니다. 오류가 롤백을 일으킨 후에 테이블 변수를 사용하여 데이터를 보관하고 로그 테이블에 쓸 수 있습니다. – HLGEM

+0

멋지다. #tempTables와 동일합니까? – jtpereyda

27

테이블 변수는 int 또는 varchar 변수와 같습니다.

삭제할 필요가 없습니다. 들은 INT 나 VARCHAR 변수

변수의 범위는 변수를 참조 할 수 거래-SQL 명령문의 범위와 동일한 규칙을 가지고 scope. 변수의 범위는 선언 된 지점부터 변수가 선언 된 일괄 처리 또는 저장 프로 시저의 끝까지 지속됩니다.

3

마찬가지로 TempTables와 마찬가지로 로컬 테이블 변수도 TempDB에 만들어집니다. 테이블 변수의 범위는 변수가 선언 된 일괄 처리, 저장 프로 시저 및 명령문 블록입니다. 프로 시저간에 매개 변수로 전달할 수 있습니다. 해당 세션을 닫으면 자동으로 삭제됩니다.

+0

#temp 테이블은 삭제되지 않습니다. @table 변수와 동일합니다. 패치 나 범위의 끝에서 자동으로 삭제되지 않습니다. 저장 프로 시저 및 저장 프로 시저 내부에서 작성된 경우에만 자동으로 삭제됩니다. –

3

그러나 루프 내에서 가변 테이블을 사용하는 경우 루프 내에서 데이터를 다시로드하기 전에 비우기 (@ 테이블 삭제)해야합니다. 다른 사람이 ...이 건너 와서 당신이 정말로 루프에서, 당신은 단지 테이블 변수에서 모두 삭제할 수 있습니다 동안처럼 드롭해야하는 경우

3

:

DELETE FROM @tableVariableName 
관련 문제