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é.
Bài viết này được đăng tại [free tuts .net]
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.