SQL-Server에서 테이블 변수를 드롭하려면 어떻게 해야 합니까?이래도 되나?
스크립트에 테이블 변수가 있습니다(저장 프로시저가 아닙니다).두 가지 질문:
- 테이블 변수를 드롭하려면 어떻게 해야 하나요?드롭 테이블 @varName에서 "Incorrect snytax" 오류가 나타난다.
- 항상 이렇게 해야 하나요?좋은 연습이라고 들었어요.이런 작은 스크립트에 꼭 필요한가요?
제 코드는 다음과 같습니다.
Declare @projectList table(
name varchar(40) NOT NULL);
Insert Into @projectList
Values ('BCR-00021')
Select *
From @projectList
Drop Table @projectList -- does not work
테이블 변수는 자동으로 로컬 및 자동으로 삭제되므로 걱정할 필요가 없습니다.
누군가 이걸 발견한다면...루프 상태에서는 테이블 변수에서 모두 삭제할 수 있습니다.
DELETE FROM @tableVariableName
테이블 변수는 int 또는 varchar 변수와 동일합니다.
떨어뜨릴 필요 없어요int 또는 varchar 변수와 동일한 범위 규칙을 가집니다.
변수의 범위는 변수를 참조할 수 있는 Transact-SQL 문의 범위입니다.변수의 범위는 선언된 시점부터 선언된 배치 또는 저장 프로시저가 끝날 때까지 지속됩니다.
그러나 루프 내에서 변수 테이블을 사용할 경우 루프 내에서 데이터를 다시 로드하기 전에 비워둘(@table 삭제)이 필요하다는 것을 모두 잊으셨습니다.
TempTables와 마찬가지로 로컬 테이블 변수도 TempDB에 생성됩니다.테이블 변수의 범위는 선언된 배치, 저장 프로시저 및 문 블록입니다.프로시저간의 파라미터로서 전달할 수 있습니다.작성한 세션을 닫으면 자동으로 삭제됩니다.
Temp 테이블 변수는 temp.db에 저장되며 스코프는 현재 실행으로 제한됩니다.따라서 Temp 테이블을 드롭하는 것과 달리 temp 테이블 변수 @tempTableVariable을 명시적으로 드롭할 필요는 없습니다.sql 서버에 의해 자동으로 관리됩니다.
drop table @tempTableVariable -- Invalid
정말이지, 당신은 그것을 떨어뜨릴 필요가 없다.@local_variable
.
단,#local_table
예를 들어 여러 번 쿼리를 다시 작성할 수 있어 편리합니다.
SELECT *
INTO #recent_records
FROM dbo.my_table t
WHERE t.CreatedOn > '2021-01-01'
;
SELECT *
FROM #recent_records
;
/*
can DROP here, otherwise will fail with the following error
on re-execution in the same window (I use SSMS DB client):
Msg 2714, Level ..., State ..., Line ...
There is already an object named '#recent_records' in the database.
*/
DROP TABLE #recent_records
;
SELECT 문을 TRANSACTION에 삽입하여 명시적인 드롭 없이 재실행할 수도 있습니다.
BEGIN TRANSACTION
SELECT *
INTO #recent_records
FROM dbo.my_table t
WHERE t.CreatedOn > '2021-01-01'
;
SELECT *
FROM #recent_records
;
ROLLBACK
여기 해결책이 있습니다.
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
'itsource' 카테고리의 다른 글
TSQL datetime 필드에서 YYY-MM-DD 형식의 날짜를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.07 |
---|---|
INSERT 문이 외부 키 제약 조건과 충돌합니다(SQL Server). (0) | 2023.04.07 |
MySQL 열거형 데이터 유형과 동일한 SQL Server? (0) | 2023.04.07 |
NULL의 <>!= 연산자가 동일하지 않습니다. (0) | 2023.04.07 |
생년월일과 getDate()를 기준으로 나이(년)를 계산하는 방법 (0) | 2023.04.07 |