Xem thêm

TRẦN VĂN BÌNH MASTER: Sức mạnh của Biến Table trong SQL Server

Huy Erick
Trong bài viết này, chúng ta sẽ khám phá một loại biến hết sức hữu ích trong SQL Server, đó là biến table. Biến này có thể được coi như một bảng tạm thời trong...

Trong bài viết này, chúng ta sẽ khám phá một loại biến hết sức hữu ích trong SQL Server, đó là biến table. Biến này có thể được coi như một bảng tạm thời trong chương trình SQL, được sử dụng để lưu trữ các dòng dữ liệu với các trường đã được định sẵn.

1. Biến table là gì?

Biến table là một loại biến đặc biệt được sử dụng để lưu trữ nhiều dòng dữ liệu, tương tự như bảng tạm thời (Temporary Tables). Điều đó có nghĩa là bạn có thể thực hiện các câu lệnh insert và select trên biến này.

Giống như bất kỳ biến nào khác, biến table chỉ tồn tại trong phạm vi mà nó được khai báo. Chẳng hạn, nếu bạn khai báo biến trong một procedure, function hoặc trigger, biến sẽ chỉ có thể sử dụng trong phạm vi đó và sau khi thực hiện xong, biến sẽ được xóa.

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

DECLARE @table_variable_name TABLE (     column_list )

Trong đó:

  • column_list là danh sách các trường của bảng, có cấu trúc tương tự như khi bạn khai báo một bảng thông thường.
  • @table_variable_name là tên của biến table, luôn bắt đầu bằng ký tự @.

Dưới đây là một ví dụ minh họa:

DECLARE @myTableVariable TABLE (     ID INT,     Name NVARCHAR(100),     Age INT )

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

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

Biến table cho phép thực hiện một số thao tác chính như insert và select.

Insert

Để thêm dữ liệu vào biến table, bạn sử dụng câu lệnh INSERT nếu muốn thêm một dòng dữ liệu, hoặc INSERT INTO nếu muốn thêm từ một câu truy vấn khác. Dưới đây là một ví dụ:

INSERT INTO @myTableVariable (ID, Name, Age) VALUES (1, 'John', 25), (2, 'Jane', 30)

Select

Giống như bảng tạm thời, bạn cũng có thể thực hiện câu lệnh SELECT trên biến table. Kết quả trả về sẽ là một danh sách các dòng dữ liệu. Chẳng hạn:

SELECT * FROM @myTableVariable

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

SQL Server Table Variables Example

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, biến table sẽ có một số hạn chế.

Nhược điểm

  1. Bạn cần khai báo cấu trúc trường ngay tại lúc tạo biến table. Không thể sử dụng câu lệnh ALTER TABLE để thay đổi cấu trúc của bảng.

  2. Biến table 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, câu truy vấn có thể trở nên chậm chạp.

  3. Không nên sử dụng biến table như một biến đầu vào hoặc biến đầu ra trong các procedure. Tuy nhiên, bạn vẫn có thể trả về biến table từ một function.

  4. Không thể tạo chỉ mục trên biến table.

  5. Nếu bạn muốn thực hiện phép JOIN trên biến table, bạn cần đặt lại tên của biến bằng từ khóa AS. Dưới đây là một ví dụ:

SELECT * FROM @myTableVariable AS t1 JOIN @myTableVariable AS t2 ON t1.ID = t2.ID

Ưu điểm

  • Sử dụng biến table trong các procedure giúp chương trình hoạt động hiệu quả hơn, vì SQL Server sẽ giảm bớt việc biên dịch so với sử dụng bảng tạm thời.

  • 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 table sẽ được lưu trữ trong cơ sở dữ liệu tempdb, chứ không phải trong bộ nhớ.

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

Dưới đây là một ví dụ về một function có tên là ufnSplit và nó sẽ trả về một biến table.

CREATE FUNCTION ufnSplit (@text NVARCHAR(MAX), @delimiter NVARCHAR(10)) RETURNS @result TABLE (     value NVARCHAR(MAX) ) AS BEGIN     WHILE CHARINDEX(@delimiter, @text) > 0     BEGIN         INSERT INTO @result (value)         SELECT LTRIM(RTRIM(SUBSTRING(@text, 1, CHARINDEX(@delimiter, @text) - 1)))          SET @text = SUBSTRING(@text, CHARINDEX(@delimiter, @text) + LEN(@delimiter), LEN(@text))     END      IF LEN(@text) > 0     BEGIN         INSERT INTO @result (value)         SELECT LTRIM(RTRIM(@text))     END      RETURN END

Và dưới đây là cách gọi đến hàm này:

SELECT * FROM ufnSplit('apple,banana,orange', ',')

Kết quả sẽ như sau:

value
apple
banana
orange

Như vậy, qua bài viết này, bạn đã nắm được cách sử dụng biến table trong SQL Server. Hy vọng rằng những ưu điểm và nhược điểm của biến table sẽ giúp bạn hiểu rõ hơn và biết phân biệt với bảng tạm thời.

1