반응형
SQL-Server에서 테이블 변수를 삭제하는 방법 이걸해야 할 변수?
펼쳐져있는 변수가 아닌 테이블 변수가 있습니다. 두 가지 질문 :
- 테이블 변수를 삭제하는 방법 Drop Table @varName에 "모형 snytax"오류가 발생합니다.
- 항상 이렇게해야합니까? 좋은 연습이라고 들었습니다. 이 같은 작은 펼쳐에 정말 필요한가요?
내 코드는 다음과 달라집니다.
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에서 잘 작동합니다.
반응형
'IT' 카테고리의 다른 글
app.all ( '*')과 app.use ( '/')의 차이점 (0) | 2020.08.03 |
---|---|
MOV와 LEA의 차이점은 무엇입니까? (0) | 2020.08.03 |
언제 java.lang.Error를 잡아야하나요? (0) | 2020.08.03 |
터미널을 통해 레일 앱으로 json 게시 요청 컬 (0) | 2020.08.03 |
루비의 노드 이름으로 클래스 인스턴스를 어떻게 만듭니 까? (0) | 2020.08.03 |