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.

  • 📦 Định nghĩa: Biến trong SQL Server chỉ chứa một giá trị và đóng vai trò như một chỗ giữ chỗ cho một vị trí bộ nhớ.
  • ???? Địa phương và Toàn cầu: SQL Server hỗ trợ các biến cục bộ có tiền tố @ do người dùng khai báo và các biến toàn cục do hệ thống quản lý có tiền tố @@.
  • 📝 TUYÊN BỐ: Câu lệnh DECLARE tạo ra một biến và theo mặc định, khởi tạo nó bằng giá trị NULL.
  • 🔀 Ba phương pháp phân công: Giá trị có thể được gán trong quá trình DECLARE, bằng SET hoặc bằng SELECT.
  • 🔎 Truy vấn con vô hướng: Cả SET và SELECT đều có thể đọc một giá trị duy nhất từ ​​truy vấn vào một biến.
  • 🧠 So sánh giữa SET và SELECT: Lệnh SET gán một biến và tuân theo tiêu chuẩn ANSI, trong khi lệnh SELECT có thể gán nhiều biến cùng một lúc.

Biến trong SQL Server: DECLARE, SET và SELECT

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.

Sơ đồ minh họa hai loại biến trong SQL Server: biến cục bộ và biến toàn cục.

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.

Kết quả đầu ra của một biến được gán trong quá trình khai báo (DECLARE), in ra giá trị 5.

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.

Kết quả của việc gán giá trị cho một biến bằng lệnh SET, in ra số 5.

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.

Kết quả của việc gán hai biến bằng lệnh SET, in ra số 5 và UNIX.

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.

GuruBảng 99 với các cột Tutorial_ID và Tutorial_name được sử dụng trong các ví dụ.

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.

Kết quả của một truy vấn con vô hướng được gán với SET, in ra tên bài hướng dẫn phù hợp.

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.

Kết quả của một truy vấn con SET kiểu vô hướng không trả về hàng nào, khiến biến trở thành NULL.

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.

Kết quả khi gán giá trị cho một biến bằng câu lệnh SELECT, in ra 5.

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.

Kết quả gán hai biến bằng một câu lệnh SELECT duy nhất, in ra 5 và UNIX

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.

Kết quả của một truy vấn con vô hướng được gán với SELECT, in ra tên bài hướng dẫn phù hợp.

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.

Kết quả của một truy vấn con SELECT vô hướng không trả về hàng nào, khiến biến trở thành NULL.

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.

Kết quả của một câu lệnh SELECT thông thường trả về một hàng.

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.

Kết quả của một câu lệnh SELECT thông thường trả về nhiều hàng, giữ nguyênping giá trị hàng cuối cùng

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.

Kết quả của một câu lệnh SELECT thông thường không trả về dòng nào, khiến biến trở thành NULL.

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.

Kết quả khi sử dụng biến trong mệnh đề WHERE để lọc. GuruBảng 99

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)'

Câu Hỏi Thường Gặp

Sau khi lệnh DECLARE được thực thi mà không có giá trị gán, biến trong SQL Server sẽ có giá trị NULL. Biến này tồn tại nhưng không có giá trị cho đến khi bạn gán giá trị cho nó bằng lệnh DECLARE với toán tử =, SET hoặc SELECT. Việc tham chiếu đến biến trước khi gán giá trị chỉ trả về NULL.

Khi truy vấn con không trả về hàng nào, SET gán giá trị NULL và ghi đè lên bất kỳ giá trị hiện có nào. Ngược lại, SELECT giữ nguyên biến, không thay đổi giá trị.ping bất kể giá trị mà nó đã nắm giữ trước đó. Sự khác biệt này rất quan trọng khi biến bắt đầu với một giá trị khác NULL.

Biến bảng, được khai báo là DECLARE @t TABLE(…), lưu trữ một tập hợp kết quả nhỏ có phạm vi trong một lô xử lý. Không giống như bảng #temp, nó chỉ tồn tại trong phạm vi lô xử lý của nó, không thể thay đổi sau khi tạo và thường phù hợp với các tập dữ liệu nhỏ.

Biến cục bộ chỉ có phạm vi sử dụng trong khối lệnh, thủ tục lưu trữ hoặc trình kích hoạt nơi nó được khai báo, bên trong một phiên làm việc duy nhất. Từ khóa GO kết thúc một khối lệnh, do đó một biến được khai báo trước GO không thể được tham chiếu sau đó.

Biến có thể sử dụng hầu hết mọi máy chủ SQL Server. loại dữ liệuBao gồm các kiểu dữ liệu int, decimal, varchar, nvarchar, date, datetime, bit và table. Hãy khớp biến với cột mà nó đại diện để tránh lỗi chuyển đổi ngầm định.

Gán lại giá trị cho biến bằng lệnh SET, ví dụ: SET @counter = @counter + 1. Lệnh SELECT cũng hoạt động: SELECT @total = @total + price. Mẫu này điều khiển các vòng lặp và tính tổng lũy ​​kế bên trong các tập lệnh và thủ tục lưu trữ.

Vâng. Trợ lý GitHub Công cụ này có thể tạo ra các câu lệnh DECLARE, SET và SELECT từ các bình luận bằng ngôn ngữ tự nhiên và đề xuất các kiểu dữ liệu phù hợp. Luôn luôn xem xét lại tên, kiểu dữ liệu và logic gán được tạo ra so với lược đồ của bạn trước khi chạy trong môi trường sản xuất.

Trợ lý trí tuệ nhân tạo và học máy tracVí dụ, hệ thống sẽ xem xét cách các biến nhận và truyền giá trị, đánh dấu các biến chưa được khởi tạo hoặc có kiểu dữ liệu sai, và đề xuất các phương án viết lại dựa trên tập hợp thay thế các vòng lặp chậm dựa trên biến. Nhà phát triển vẫn cần xác nhận lại từng thay đổi dựa trên dữ liệu và khối lượng công việc thực tế.

Tóm tắt bài viết này với: