IT

SQL-Server에서 테이블 변수를 삭제하는 방법

lottoking 2020. 8. 3. 17:30
반응형

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

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


테이블 변수는 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에서 잘 작동합니다.

참고 URL : https://stackoverflow.com/questions/5653520/how-do-i-drop-table-variables-in-sql-server-should-i-even-do-this

반응형