Biến SQL: Khai báo, thiết lập và chọn biến trong SQL Server
⚡ Tóm tắt thông minh
Biến trong SQL Server là các đối tượng được đặt tên, đóng vai trò là chỗ giữ chỗ cho một giá trị dữ liệu duy nhất trong bộ nhớ. Một biến phải được khai báo bằng câu lệnh DECLARE trước khi có thể được gán giá trị và sử dụng lại.

Biến trong SQL Server là gì?
In Máy chủ MS SQLBiến là các đối tượng đóng vai trò như các phần giữ chỗ cho một vị trí bộ nhớ. Một biến chứa một giá trị dữ liệu duy nhất mà bạn có thể đọc và sử dụng lại trong toàn bộ lô lệnh hoặc thủ tục.
Các loại biến trong SQL: Cục bộ, Toàn cầu
MS SQL Server có hai loại biến:
- Biến cục bộ
- Biến toàn cục
Tuy nhiên, người dùng chỉ có thể tạo biến cục bộ. Hình dưới đây minh họa hai loại biến có sẵn trong MS SQL Server.
Biến cục bộ
- Người dùng khai báo biến cục bộ.
- Theo mặc định, tên biến cục bộ bắt đầu bằng ký tự @.
- Mỗi biến cục bộ chỉ có phạm vi áp dụng cho lô xử lý hoặc quy trình hiện tại trong một phiên làm việc nhất định.
Biến toàn cục
- Hệ thống duy trì biến toàn cục; người dùng không thể khai báo biến mới.
- Tên biến toàn cục bắt đầu bằng @@.
- Nó lưu trữ thông tin liên quan đến phiên làm việc.
Cách KHAI THÁC một biến trong SQL
Trước khi sử dụng bất kỳ biến nào trong một lô hoặc quy trình trong SQLBạn phải khai báo nó. Lệnh DECLARE tạo ra một biến đóng vai trò là chỗ giữ chỗ cho một vị trí bộ nhớ. Chỉ khi nào khai báo xong thì biến đó mới có thể được sử dụng trong phần tiếp theo của tập lệnh hoặc thủ tục.
Cú pháp TSQL:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
Quy tắc:
- Việc khởi tạo là tùy chọn trong quá trình khai báo.
- Theo mặc định, DECLARE khởi tạo biến thành NULL.
- Việc sử dụng từ khóa 'AS' là tùy chọn.
- Để khai báo nhiều hơn một biến cục bộ, hãy thêm dấu phẩy sau định nghĩa đầu tiên, sau đó đặt tên biến tiếp theo và... loại dữ liệu.
Ví dụ khai báo biến
Truy vấn: Với 'AS'
DECLARE @COURSE_ID AS INT;
Truy vấn: Không có 'AS'
DECLARE @COURSE_NAME VARCHAR (10);
Truy vấn: KHAI THÁC hai biến
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
Gán giá trị cho biến SQL
Bạn có thể gán giá trị cho một biến theo ba cách sau:
- Trong quá trình khai báo biến bằng từ khóa DECLARE.
- Sử dụng SET.
- Sử dụng câu lệnh SELECT.
Chúng ta hãy cùng xem xét chi tiết cả ba cách.
Trong quá trình khai báo biến bằng từ khóa DECLARE
Cú pháp T-SQL:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
Ở đây, sau kiểu dữ liệu, bạn có thể sử dụng dấu '=' theo sau là giá trị cần gán.
truy vấn:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
Khi chạy truy vấn, giá trị được gán trong quá trình khai báo sẽ được in ra, như hình bên dưới.
Sử dụng biến SQL SET
Đôi khi bạn muốn tách biệt việc khai báo và khởi tạo. Phương thức SET gán giá trị cho biến sau khi nó đã được khai báo. Dưới đây là các cách khác nhau để gán giá trị bằng phương thức SET.
Ví dụ: Gán giá trị cho một biến bằng cách sử dụng SET.
Cú pháp:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
truy vấn:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
Việc thực thi đoạn mã sẽ trả về giá trị được gán bằng lệnh SET, như hiển thị bên dưới.
Ví dụ: Gán giá trị cho nhiều biến bằng cách sử dụng SET.
Cú pháp:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
Quy tắc: Một từ khóa SET chỉ có thể gán giá trị cho một biến duy nhất.
truy vấn:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Hai câu lệnh PRINT trả về cả hai giá trị đã được gán, như minh họa bên dưới.
Ví dụ: Gán giá trị cho một biến bằng truy vấn con vô hướng sử dụng SET.
Cú pháp:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
Quy tắc:
- Đặt câu hỏi trong dấu ngoặc đơn.
- Truy vấn phải là truy vấn đơn giá trị, nghĩa là nó chỉ trả về một hàng và một cột. Nếu không, truy vấn sẽ báo lỗi.
- Nếu truy vấn trả về không có hàng nào, thì biến đó được đặt thành EMPTY, tức là NULL.
Giả sử chúng ta có bàn tên là 'GuruBảng '99' với hai cột, như hiển thị bên dưới. Bảng này được sử dụng trong các ví dụ sau.
Ví dụ 1: Khi truy vấn con trả về một hàng làm kết quả
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
Vì truy vấn con trả về một hàng phù hợp, nên biến sẽ nhận giá trị đó, như minh họa bên dưới.
Ví dụ 2: Khi truy vấn con trả về kết quả là không có hàng nào.
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Vì truy vấn con không trả về hàng nào, giá trị của biến là EMPTY, tức là NULL, do đó không có gì được in ra, như hình bên dưới.
Sử dụng biến SQL SELECT
Giống như SET, bạn cũng có thể sử dụng SELECT để gán giá trị cho biến sau khi đã khai báo chúng bằng DECLARE. Dưới đây là các cách khác nhau để gán giá trị bằng SELECT.
Ví dụ: Gán giá trị cho một biến bằng câu lệnh SELECT
Cú pháp:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
truy vấn:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
Lệnh SELECT sẽ in ra giá trị, như hình bên dưới.
Ví dụ: Gán giá trị cho nhiều biến bằng câu lệnh SELECT
Cú pháp:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
Quy tắc: Khác với SET, SELECT có thể gán giá trị cho nhiều biến được phân cách bởi dấu phẩy.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Cả hai biến đều được gán giá trị trong một câu lệnh SELECT duy nhất, như minh họa bên dưới.
Ví dụ: Gán giá trị cho một biến bằng truy vấn con sử dụng SELECT
Cú pháp:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
Quy tắc:
- Đặt câu hỏi trong dấu ngoặc đơn.
- Truy vấn phải là truy vấn đơn giá trị trả về một hàng và một cột. Nếu không, truy vấn sẽ báo lỗi.
- Nếu truy vấn trả về không có hàng nào, thì biến đó sẽ RỖNG, tức là NULL.
Hãy xem xét lại 'GuruBàn 99'.
Ví dụ 1: Khi truy vấn con trả về một hàng làm kết quả
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
Truy vấn con trả về một hàng, vì vậy biến này lưu giữ giá trị đó, như được hiển thị bên dưới.
Ví dụ 2: Khi truy vấn con trả về kết quả là không có hàng nào.
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Nếu không có hàng nào khớp, biến này sẽ vẫn TRỐNG, tức là NULL, như hình bên dưới.
Ví dụ 3: Gán giá trị cho một biến bằng câu lệnh SELECT thông thường
Cú pháp:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
Quy tắc:
- Khác với SET, nếu truy vấn trả về nhiều hàng thì giá trị của biến sẽ được đặt thành giá trị của hàng cuối cùng.
- Nếu truy vấn trả về không có hàng nào, thì biến đó được đặt thành EMPTY, tức là NULL.
Truy vấn 1: Truy vấn trả về một hàng
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
Hàng khớp duy nhất sẽ thiết lập giá trị biến, như minh họa bên dưới.
Truy vấn 2: Truy vấn trả về nhiều hàng
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
Khi có nhiều hàng trùng khớp, biến này sẽ giữ giá trị từ hàng cuối cùng, như minh họa bên dưới.
Truy vấn 3: Truy vấn trả về không có hàng nào.
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
Khi không có dòng nào khớp, biến đó sẽ trống, tức là NULL, như hình bên dưới.
Các ví dụ về biến SQL khác
Biến đã khai báo cũng có thể được sử dụng bên trong truy vấn, ví dụ như trong mệnh đề WHERE để lọc các hàng.
truy vấn:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
Biến này lọc truy vấn và trả về hàng phù hợp, như minh họa bên dưới.
Sự thật thú vị về các biến máy chủ SQL!
- Biến cục bộ có thể được hiển thị bằng lệnh PRINT cũng như lệnh SELECT.
- Kiểu dữ liệu bảng không cho phép sử dụng 'AS' trong quá trình khai báo.
- SET tuân thủ các tiêu chuẩn ANSI, trong khi SELECT thì không.
- Việc tạo một biến cục bộ có tên là @ cũng được cho phép. Ví dụ, nó có thể được khai báo như sau:
'DECLARE @@ as VARCHAR (10)'















