[sql] SQL-Server에서 테이블 변수를 삭제하려면 어떻게합니까? 나도해야하나요?

스크립트에 저장 프로 시저가 아닌 테이블 변수가 있습니다. 두 가지 질문 :

  1. 테이블 변수를 어떻게 삭제합니까? Drop Table @varName은 “잘못된 구문”오류를 제공합니다.
  2. 나는 항상 이것을해야합니까? 좋은 습관이라고 들었습니다. 이와 같은 작은 스크립트에 정말로 필요합니까?

내 코드는 다음과 같습니다.

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

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

Select *
From @projectList

Drop Table @projectList -- does not work



답변

테이블 변수는 자동으로 로컬이며 자동으로 삭제됩니다. 걱정할 필요가 없습니다.


답변

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

그것들을 떨어 뜨릴 필요가 없습니다. int 또는 varchar 변수 와 동일한 범위 규칙 이 있습니다.

변수의 범위는 변수를 참조 할 수있는 Transact-SQL 문의 범위입니다. 변수의 범위는 선언 된 시점부터 선언 된 배치 또는 저장 프로 시저가 끝날 때까지 지속됩니다.


답변

다른 누군가가 이것을 발견하면 … 루프 에서처럼 정말로 드롭해야 할 경우 테이블 변수에서 모두 삭제할 수 있습니다.

DELETE FROM @tableVariableName


답변

그러나 변수 테이블이 루프 내에서 사용되는 경우 루프 내에서 데이터를 다시로드하기 전에 비우기 (@table 삭제)가 필요하다는 것을 모두 언급하는 것을 잊었습니다.


답변

TempTables와 마찬가지로 로컬 테이블 변수도 TempDB에 생성됩니다. 테이블 변수의 범위는 선언 된 배치, 저장 프로 시저 및 문 블록입니다. 프로 시저간에 매개 변수로 전달할 수 있습니다. 생성 한 세션을 닫으면 자동으로 삭제됩니다.


답변

여기에 해결책이 있습니다

Declare @tablename varchar(20)
DECLARE @SQL NVARCHAR(MAX)

SET @tablename = '_RJ_TEMPOV4'
SET @SQL = 'DROP TABLE dbo.' + QUOTENAME(@tablename) + '';

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tablename) AND type in (N'U'))
    EXEC sp_executesql @SQL;

SQL Server 2014 Christophe에서 잘 작동합니다.


답변