Thứ Ba, 25 tháng 7, 2023

Biến Table trong SQL Server

Trong bài này bạn sẽ được học một loại biến rất hay đó là biến table trong SQL Server, biến này có thể hiểu là một bảng tạm thời trong một chương trình SQL dùng để lưu trữ các row dữ liệu có các column đã định sẵn.

Mục lục

  • 1. Biến table là gì?
  • 2. Một số cách sử dụng biến table
    • Insert
    • Select
  • 3. Ưu điểm và nhược điểm của biến table
    • Nhược điểm
    • Ưu điểm
  • 4. Sử dụng biến table trong function

1. Biến table là gì?

Biến table là một loại biến đặc biệt dùng để lưu trữ nhiều dòng dữ liệu, nó có chức năng gần giống như bảng tạm Temporary Tables, nghĩa là bạn có thể insert và select dữ liệu của nó.

Vì nó cũng là một biến nên chỉ tồn tại trong phạm vi khai báo của nó. Ví dụ bạn khai báo trong procedure, function hoặc trigger thì biến chỉ sử dụng được trong đó mà thôi, sau khi chạy xong nó sẽ biến mất.

Để khai báo biến table thì bạn sử dụng từ khóa DECLARE với cú pháp sau:

1
2
3
DECLARE @table_variable_name TABLE (
    column_list
);

Trong đó:

  • column_list chính là danh sách các column của table, cấu trúc giống như việc bạn khai báo một bảng thông thường.
  • @table_variable_name là tên của table, luôn bắt đầu bằng kí tự @

Hãy xem ví dụ dưới đây:

1
2
3
4
5
DECLARE @product_table TABLE (
    product_name VARCHAR(MAX) NOT NULL,
    brand_id INT NOT NULL,
    list_price DEC(11,2) NOT NULL
);

Như bạn thấy cách khai báo cũng tương tự như lệnh Create Table, bởi vì bản chất nó cũng là một table, chỉ khác là nó chỉ tồn tại trong một phạm vi nhất định.

2. Một số cách sử dụng biến table

Chúng ta có những thao tác chính như insert, select.

Insert

Để thêm data thì ta sử dụng lệnh INSERT nếu thêm một row dữ liệu, sử dụng INSERT INTO nếu muôn thêm từ một câu truy vấn khác. Như ví dụ dưới dây mình sẽ thêm từ một câu truy vấn.

1
2
3
4
5
6
7
8
9
INSERT INTO @product_table
SELECT
    product_name,
    brand_id,
    list_price
FROM
    production.products
WHERE
    category_id = 1;

Select

Giống như temporary table, bạn có thể thực hiện câu lệnh select trên biến table.

1
2
3
4
SELECT
    *
FROM
    @product_table;

Kế quả sẽ trả về danh sách sản phẩm như hình dưới đây.

SQL Server Table Variables Example png

3. Ưu điểm và nhược điểm của biến table

Vì chỉ là một biến thông thường nên sẽ có rất nhiều hạn chế.

Nhược điểm

Thứ nhất, bạn sẽ phải khai báo cấu trúc column ngay câu lệnh tạo biến, bạn không thể sử dụng ALTER TABLE để thay đổi cấu trúc của bảng.

Thứ hai, nó chỉ phù hợp với việc lưu trữ dữ liệu nhỏ, nếu lưu trữ dữ liệu quá lớn thì sẽ truy vấn rất chậm.

Thứ ba, không nên sử dụng nó là một biến đầu vào hoặc biến đầu ra ở procedure, tuy nhiên bạn có thể return nó trong function.

Thứ tư, bạn không thể tạo chỉ mục trên bảng tạm.

Thứ 5, nếu bạn muốn thực hiện phép JOIN trên bảng tạm thì bạn phải đặt lại bí danh cho nó bằng từ khóa AS. Hãy xem ví dụ dưới đây.

1
2
3
4
5
6
7
SELECT
    brand_name,
    product_name,
    list_price
FROM
    brands b
INNER JOIN @product_table pt ON p.brand_id = pt.brand_id;

Ưu điểm

Sử dụng biến table trong procedure giúp chương trình hoạt động tốt hơn bởi SQL Server sẽ ít phải biên dịch hơn so với sử dụng bảng tạm.

Biến table sử dụng ít tài nguyên hơn.

Tương tự như bảng tạm thời, các biến bảng sẽ sống trong cơ sở dữ liệu tempdb chứ không phải trong bộ nhớ.

4. Sử dụng biến table trong function

Hãy xem ví dụ dưới đây, đây là một function có tên là ufnSplit và nó sẽ trả về một variable table.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
CREATE OR ALTER FUNCTION udfSplit(
    @string VARCHAR(MAX),
    @delimiter VARCHAR(50) = ' ')
RETURNS @parts TABLE
(   
idx INT IDENTITY PRIMARY KEY,
val VARCHAR(MAX)  
)
AS
BEGIN
  
DECLARE @index INT = -1;
  
WHILE (LEN(@string) > 0)
BEGIN
    SET @index = CHARINDEX(@delimiter , @string)  ;
     
    IF (@index = 0) AND (LEN(@string) > 0) 
    BEGIN 
        INSERT INTO @parts
        VALUES (@string);
        BREAK 
    END
  
    IF (@index > 1) 
    BEGIN 
        INSERT INTO @parts
        VALUES (LEFT(@string, @index - 1));
         
        SET @string = RIGHT(@string, (LEN(@string) - @index)); 
    END
    ELSE
    SET @string = RIGHT(@string, (LEN(@string) - @index));
    END
RETURN
END

Và đây là cách gọi đến hàm này.

1
2
3
4
SELECT
    *
FROM
    udfSplit('foo,bar,baz',',');

Kế quả sẽ nhưu hình sau:

SQL Server Table Variables user defined function example png

Như vậy là mình đã giới thiệu xong cách sử dụng biến table (tvariable able), hy vọng qua bài này bạn sẽ hiểu được những ưu điểm và nhược điểm của nó, đồng thời phân biệt được temporary table và variable table.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master