Bảng tạm Temporary Tables trong SQL Server

Trong bài này mình sẽ hướng dẫn cách tạo và sử dụng bảng tạm Temporary table trong SQL Server, cách sử dụng bảng tạm hiệu quả nhất.

1. Temporary Table là gì?

Temporary Table hay còn gọi là bảng tạm, đây là một dạng table đặc biệt được lưu trữ tạm thời trên SQL Server, nó rất hữu ích để lưu kết quả của một câu truy vấn SELECT nào đó để sử dụng nhiều lần.

Bảng tạm cũng là một table nên nó có đầy đủ các tính chất của table, nghĩa là bạn có thể thực hiện các thao tác như SELECT, INSERT trên đó một cách bình thường.

Bảng tạm có hai loại, thứ nhất là Local Temporary Table và thứ hai là Global Temporary Table. Trong phần 1 này chúng ta sẽ tìm hiểu Local Temporary Table trước nhé.

SQL Server cho phép bạn tạo bảng tạm bằng hai cách, thứ nhất là dùng cú pháp CREATE TABLE  và thứ hai là INSERT INTO.

Dùng INSERT INTO

Cách đầu tiên chúng ta sẽ dùng INSERT INTO để tạo bảng tạm, bạn sử dụng cú pháp như sau:

SELECT 
    select_list
INTO 
    temporary_table
FROM 
    table_name
....

Tên của bảng tạm phải bắt đầu bằng dấu thăng #, xem ví dụ sau:

SELECT
    product_name,
    list_price
INTO #trek_products --- temporary table
FROM
    production.products
WHERE
    brand_id = 9;

Trong ví dụ này SQL Server sẽ tạo một bảng tạm tên là #trek_products, bảng này có 2 column đó là product_name và list_price, dữ liệu của nó là kết quả trả về từ câu truy vấn trên.

Bạn hãy mở công cụ SSMS lên và thực hiện các thao tác theo thứ tự System Databases > tempdb > Temporary Tables thì sẽ thấy table bảng tạm sau:

Như bạn thấy trong hình chụp này thì tên của bảng tạm sẽ được bổ sung một hậu tố phía sau, điều này sẽ giúp tránh được trường hợp bị trùng tên bởi bảng tạm được lưu trữ chung trong một database tempdb.

Dùng CREATE TABLE

Lệnh Create Table sẽ tạo ra một bảng tạm rỗng nên sau khi tạo xong bạn phải sử dụng lệnh INSERT để thêm dữ liệu vào. Về cú pháp thì chỉ có sự khác biệt là tên của nó phải có dấu #.

CREATE TABLE #haro_products (
    product_name VARCHAR(MAX),
    list_price DEC(10,2)
);

Lệnh này sẽ tạo ra bảng tạm #haro_products gồm hai column đó là product_name và list_price. Tuy nhiên nó không có dữ liệu nên mình sử dụng lệnh INSERT để thêm vào.

INSERT INTO #haro_products
SELECT
    product_name,
    list_price
FROM 
    production.products
WHERE
    brand_id = 2;

Và đương nhiên sau này khi bạn thay đổi dữ liệu ở bảng gốc thì sẽ không ảnh hưởng gì đến dữ liệu của bảng tạm.

2. Global Temporary Table

Ở các ví dụ trên là Local Temporary Table, tức là nó chỉ tồn tại cho một phiên làm việc mà thôi. Không tin bạn hãy mở một connection khác và thực hiện câu SQL sau:

SELECT
    *
FROM
    #haro_products;

Bạn sẽ bị lỗi: Invalid object name '#haro_products'

Nếu bạn muốn bảng có thể được sử dụng cho nhiều phiên làm việc thì hãy chuyển nó thành Global bằng cách thêm hai dấu thăng ở tên table. Cú pháp như sau:

CREATE TABLE ##heller_products (
    product_name VARCHAR(MAX),
    list_price DEC(10,2)
);

INSERT INTO ##heller_products
SELECT
    product_name,
    list_price
FROM 
    production.products
WHERE
    brand_id = 3;

Bây giờ bạn có thể truy vấn nó ở bất kì phiên làm việc nào.

3. Xóa Temporary Table

Mặc định của temporary sẽ bị xóa khỏi hệ thống khi một phiên làm việc chấm dứt. Ví dụ bạn đang làm ứng dụng website thì bạn nên thực hiện một kết nối thì có thể sử dụng toàn trang, còn bạn thực hiện 2 kết nối thì nếu kết nối thứ nhất tạo bảng tạm thì kết nối thứ hai không dùng được, đương nhiên cả hai kết nối phải chưa ngắt.

Nhưng đôi khi bạn muốn tự tay xóa thì hãy sử dụng lệnh DROP TABLE.

DROP TABLE ##table_name;

Không có gì khác so với một table bình thường.

Khóa học nên xem

Nguồn: freetuts.net