Bảng tạm còn gọi là Temporary Table, là một dạng table đặc biệt được lưu trữ tạm thời trên SQL Server, 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ó đầ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, UPDATE, DELETE 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 (một dấu # trước tên bảng) và thứ hai là Global Temporary Table (hai dấu # trước tên bảng).
SQL Server cho phép bạn tạo bảng tạm bằng hai cách: dùng cú pháp CREATE TABLE và dùng câu lệnh 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
....
Lưu ý: Tên của bảng tạm phải bắt đầu bằng dấu thăng #
Ví dụ:
SELECT
product_name, price
INTO #first_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à #first_products, bảng này có 2 cộtđó là product_name và price, dữ liệu của nó là kết quả trả về từ câu truy vấn SELECT.
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 #second_products (
product_name VARCHAR(MAX),
price DEC(10,2)
);
Lệnh này sẽ tạo ra bảng tạm #second_products gồm hai cột đó là product_name và price. Tuy nhiên nó không có dữ liệu nên cần sử dụng câu lệnh INSERT để thêm vào.
INSERT INTO #second_products
SELECT
product_name, price
FROM
production.products
WHERE
brand_id = 2;
Ở 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.
Khi hết phiên làm việc, bạn hãy mở một connection khác và thực hiện câu SQL sau:
SELECT
*
FROM
#first_products;
Bạn sẽ bị lỗi: Invalid object name '#first_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 ##third_products (
product_name VARCHAR(MAX),
price DEC(10,2)
);
INSERT INTO ##third_products
SELECT
product_name, 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.
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. Tuy nhiên, đôi lúc bạn muốn tự tay xóa thì hãy sử dụng lệnh DROP TABLE như bảng thường.
DROP TABLE #local_table_name;
DROP TABLE ##global_table_name;