그것은 매우 유익한 데이터를 저장하는 SQL Server temp 테이블보다 조작 또는 작품으로 영원한 테이블이 있습니다. 테이블에 대한 전체 DDL 또는 DML 액세스를 원하지만 가지고 있지 않다고 가정 해 봅시다. 기존 읽기 액세스를 사용하여 데이터를 sql Server 임시 테이블로 가져 와서 거기에서 조정할 수 있습니다. 또는 기존 데이터베이스에 테이블을 만들 수있는 권한이 없으며 조작 할 수있는 SQL Server temp 테이블을 만들 수 있습니다., 마지막으로 현재 세션에서만 데이터를 표시해야하는 상황에 처했을 수 있습니다.
SQL Server 는 매우 도움이 될 수있는 몇 가지 유형의 SQL Server temp 테이블을 지원합니다.
전에 우리가 진행을하려는 경우를 따라 모든 코드 샘플을 제안 열 SQL 서버 관리 Studio
로컬 SQL temp 테이블
로컬 SQL Server temp 테이블을 사용하여 만든 파운드 기호 또는”태그”다음 테이블은 이름입니다. 예:#Table_name. Sql temp 테이블은 tempdb 데이터베이스에 생성됩니다., 로컬 SQL Server temp 테이블은 현재 세션에만 표시됩니다. 선언 된 세션 외부의 프로세스 또는 쿼리에서 보거나 사용할 수 없습니다. 다음은 결과 집합을 가져 와서 SQL Server temp 테이블에 넣는 빠른 예입니다.
SQL Server temp 테이블에 가장 자주 사용되는 시나리오 중 하나는 일종의 루프 내에 있습니다. 예를 들어,당신은 프로세스는 데이터에 대한 SQL 문을 그리고 당신은 장소가 필요 항목을 저장한 루프를 통해 읽. 그렇게 할 수있는 신속하고 효율적인 수단을 제공합니다., 위의 코드 샘플을 참조하면 루프가 이제 SQL Server temp 테이블을 참조하고 목표의 기준에 맞는 레코드를 처리 할 수 있습니다.
SQL Server temp 테이블을 사용하는 또 다른 이유는 sql 문에서 수행해야 할 까다로운 처리가 있기 때문입니다. 조인을 만들고 그 결과 집합에서 레코드를 끌어 올 필요가있을 때마다이 조인을 모두 다시 처리해야한다고 가정 해 봅시다. 이 결과 세트를 한 번만 처리하고 레코드를 SQL temp 테이블에 던지지 않는 이유는 무엇입니까? 그런 다음 나머지 sql 문이 SQL temp 테이블 이름을 참조하도록 할 수 있습니다., 이 값 비싼 쿼리 처리를 절약 할뿐만 아니라 코드를 조금 더 깨끗하게 보이게 할 수도 있습니다. 그러나 내가 만들고 싶은 점이 하나 있습니다. 는 경우는 세션에 우리는 작업 중에는 이후의 중첩된 세션,SQL Server temp 테이블에 표시됩니다 세션에서 더 낮은 계층 구조,하지만 위에서는 계층 구조로 구성됩니다. 내가 이것을 시각화 할 수있게 해주십시오.
이 빠른 다이어그램에서는 Sql temp 테이블이 세션 2 에서 생성됩니다. 그 아래의 세션(세션 3 및 세션 4)은 SQL Server temp 테이블을 볼 수 있습니다., 그러나 세션 2 위에있는 세션 1 은 SQL Server temp 테이블을 볼 수 없습니다.
SQL temp 테이블을 삭제 또는 파괴되면 세션이 연결을 끊습니다. 여러 번 당신은 개발자가 그냥 정리하기 위해 자신의 문의 끝에”드롭#Table_Name”명령을 사용하는 것을 볼 수 있습니다. 그러나 그것은 전적으로 당신과 당신이 성취하려고하는 것에 달려 있습니다.,
또한,주의에는 이벤트의 이름을 충돌(기억하는 SQL Server temp 테이블이 생성 tempdb)SQL 서버에 추가는 접미사를 끝 테이블의 이름을 그래서 그것은 내에서 고유 tempdb 데이터베이스입니다. 그러나이 프로세스는 개발자/사용자에게 투명합니다. 해당 세션에 국한된 것처럼 선언 한 것과 동일한 이름을 사용할 수 있습니다.
Global SQL temp tables
Global SQL temp tables 는 결과 세트가 다른 모든 세션에 표시되기를 원할 때 유용합니다. 권한을 설정할 필요가 없습니다., 누구나 값을 삽입하거나 수정하거나 테이블에서 레코드를 검색 할 수 있습니다. 또한 누구나 테이블을 떨어 뜨릴 수 있음에 유의하십시오. 로컬 SQL Server temp 테이블과 마찬가지로 세션이 연결 해제되면 삭제되고 더 이상 테이블에 대한 참조가 더 이상 없습니다. 항상”드롭”명령을 사용하여 수동으로 정리할 수 있습니다. 어느 것이 내가 추천 할만한 것입니다.
를 만드는 글로벌 SQL temp 테이블,당신은 단순히 사용하여 두 개의 파운드 기호 앞에는 테이블의 이름입니다. 예제:##Global_Table_Name.,
테이블 변수
테이블 변수는 DECLARE 문을 사용하여 다른 변수와 마찬가지로 생성됩니다. 많은 사람들은 테이블 변수가 메모리에만 존재한다고 믿지만 단순히 사실이 아닙니다. 그들은 많은 로컬 SQL 서버 임시 테이블과 같은 tempdb 데이터베이스에 상주. 또한 로컬 SQL temp 테이블과 마찬가지로 테이블 변수는 생성 한 세션 내에서만 액세스 할 수 있습니다. 그러나 sql temp 테이블과 달리 테이블 변수는 현재 배치 내에서만 액세스 할 수 있습니다. 그것들은 배치 외부에서 볼 수 없으므로 세션 계층 구조의 개념이 다소 무시 될 수 있음을 의미합니다.,
성능에 관한 한 테이블 변수는 적은 양의 데이터(단 몇 행과 같은)로 유용합니다. 그렇지 않으면 많은 양의 데이터를 선별 할 때 SQL Server temp 테이블이 유용합니다. 따라서 대부분의 스크립트의 경우 테이블 변수와 반대되는 SQL Server temp 테이블의 사용을 볼 가능성이 큽니다. 지 않을 말하는 것 중 하나입니다 더 유용한 다른 것보다,그것은 단지 당신이 올바른 도구를 선택합니다.
다음은 테이블 변수를 설정하고 사용하는 빠른 예입니다.,
우리는 판매 된 특정 제품의 총 수량에 관한 정보를 보유 할 테이블 변수를 만들었습니다. 이것은 매우 단순화 된 예이며 많은 행이 포함되어 있다면 사용하지 않을 것입니다. 그러나 우리가 단지 몇 가지 제품을보고 있다면 이것은 정말 잘 할 수 있습니다. 일단 테이블 변수가 채워지면 이것을 다른 테이블에 테이블로 조인하고 필요한 정보를 수집 할 수 있습니다. 따라서 많은 유연성이 있으며 개발자가 상당히 창의적 일 수 있습니다.
또한 최종 메모에서 테이블 변수에 대한 트랜잭션 측면에서., 는 경우에 개발자의 롤 트랜잭션을 포함하는 테이블의 변경 내용 변수를 변경 변수 테이블에이의 특정 트랜잭션이 그대로 남아있다. 그 말은,다른 부분에 트랜잭션이 문제이지만,아무것도 변수 테이블을 참조하지 않을 것이 없는 한,해당 부분의 스크립트에 오류가 있습니다.,
- 저자
- 최근 게시글
그는 헬프 데스크 세계에서 IT 경력을 시작했고 결국 사물의 네트워킹/시스템 관리자 측으로 옮겼습니다. 몇 시간 후,그가 개발한 애정 작업에 대한 데이터베이스(주로 SQL 서버)에 초점을 맞추고있는 그의 경력에는 과거에 있습니다., 그는 모두 서로 다른 요구를 가진 크고 작은 환경에서 다양한 산업 분야에서 일해 왔습니다.
SQL Shack 은 수년 동안 그에게 많은 것을 제공 한 커뮤니티에 기여할 수있는 기회를 제공했습니다.,
모두 보기 게시물에 의해 아미르 Syed
- 은 SQL 서버는 항상 암호화를 위한 중요 데이터 암호화,권한 환경 월 27 일 2018
- 사용 사례에 대한 쿼리점에서 SQL Server-July18,2018 년
- 사용하는 경우에는 SQL 임시 테이블의 대 변수 테이블-February21,2017