Declare trong SQL Server là gì? Cách dùng Declare SQL Server như thế nào? Hãy cùng thuthuatmeohay.com tìm hiểu cách khai báo biến trong SQL Server như thế nào nhé!
SQL Server là một trong số kiến thức mà mọi lập trình viên đều cần biết. Thực tế, nó không hề phức tạp như vẻ bề ngoài. Nếu chịu khó tìm hiểu, bạn sẽ thấy nó rất dễ sử dụng.
Trong SQL Server, bạn sẽ thấy có đầy đủ khái niệm về kiểu dữ liệu, biến và khai báo biến giống như những ngôn ngữ lập trình khác. thuthuatmeohay.com sẽ cung cấp cho bạn những kiến thức cơ bản về SQL Server. Ở bài viết này, chúng ta hãy cùng nhau học về gán biến trong SQL hay khai báo biến SQL như thế nào nhé!
Biến (Variable) dùng để lưu trữ các giá trị tạm thời trong quá trình thực thi thuật toán.
Cú pháp khai báo biến trong SQL Server
Để khai báo biến trong SQL Server, ta sử dụng câu lệnh DECLARE, được biểu diễn như sau:
DECLARE @variable_name datatype [ = initial_value ],
@variable_name datatype [ = initial_value ],
...;
Tham số:
- variable_name: tên gán cho biến.
- datatype: kiểu dữ liệu của biến.
- initial_value: giá trị mặc định gán cho biến (không bắt buộc).
Khai báo một biến trong SQL Server
Dùng DECLARE khai báo một biến bất kì
DECLARE @quantrimang VARCHAR(50);
Câu lệnh DECLARE này khai báo một biến có tên @quantrimang, với kiểu dữ liệu VARCHAR và độ dài 50 kí tự.
Sau đó bạn thay đổi giá trị biến @quantrimang bằng cách sử dụng câu lệnh SET.
SET @quantrimang = 'Hello world';
Tiếp theo hãy thử với kiểu dữ liệu INT:
DECLARE @site_value INT;
Sử dụng câu lệnh SET để gán giá trị cho biến @site_value
SET @site_value = 10;
Vậy biến @site_value ở đây được gán cho số nguyên 10.
Khai báo nhiều biến trong SQL Server
Cách sử dụng lệnh như sau:
DECLARE @quantrimang VARCHAR(50),
@site_value INT;
Trong ví dụ này, chúng ta có hai biến được khai báo: biến @quantrimang với kiểu dữ liệu VARCHAR(50) và biến @site_value kiểu dữ liệu INT.
Khai báo biến với giá trị mặc định trong SQL Server
Trong SQL Server, ta có thể gán giá trị mặc định cho biến ngay lúc khai báo.
DECLARE @quantrimang VARCHAR(50) = 'Hello world';
Vậy ở đây biến @quantrimang với kiểu dữ liệu VARCHAR và độ dài 50 kí tự được gán mặc định cho giá trị ‘Hello world’.
Tương tự ta khai báo với kiểu dữ liệu INT:
DECLARE @site_value INT = 10;
Khai báo nhiều hơn một biến có gán giá trị ban đầu
Cách sử dụng lệnh như sau:
DECLARE @quantrimang VARCHAR(50) = 'Hello world';
@site_value INT = 10;
Hai biến @quantrimang và @site_value đã được khai báo ở chung một lệnh và được gán giá trị ban đầu mặc định.
Khai báo một biến của bảng type
Ví dụ sau tạo một biến table, chứa giá trị được xác định trong mệnh đề OUTPUT của lệnh UPDATE. Hai câu lệnh SELECT theo sau trả về các giá trị trong @MyTableVar và kết quả của thao tác cập nhật trong bảng Employee. Kết quả trong cột INSERTED.ModifiedDate khác với các giá trị trong cột ModifiedDate của bảng Employee. Điều này là do trình kích hoạt AFTER UPDATE, cập nhật giá trị của ngày sửa đổi thành ngày hiện tại, được xác định trên bảng Employee. Tuy nhiên, các cột được trả về từ OUTPUT phản ánh dữ liệu trước khi được kích hoạt.
Ví dụ:
USE AdventureWorks2012;
GO
DECLARE @MyTableVar TABLE (
EmpID INT NOT NULL,
OldVacationHours INT,
NewVacationHours INT,
ModifiedDate DATETIME);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25
OUTPUT INSERTED.BusinessEntityID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO
Khai báo một biến của bảng type với các chỉ mục nội tuyến
Ví dụ sau tạo một biến table với một chỉ mục nội tuyến được nhóm lại với nhau và hai chỉ mục inline không nhóm:
DECLARE @MyTableVar TABLE (
EmpID INT NOT NULL,
PRIMARY KEY CLUSTERED (EmpID),
UNIQUE NONCLUSTERED (EmpID),
INDEX CustomNonClusteredIndex NONCLUSTERED (EmpID)
);
GO
Truy vấn sau trả thông tin về các chỉ mục được tạo ở truy vấn trước.
SELECT *
FROM tempdb.sys.indexes
WHERE object_id < 0;
GO
Khai báo một biến của kiểu bảng do người dùng định nghĩa
Ví dụ sau tạo một tham số có giá trị bảng hoặc biến bảng tên @LocationTVP. Điều này yêu cầu một kiểu bảng do người dùng định nghĩa tên LocationTableType.
DECLARE @LocationTVP
AS LocationTableType;
Bài trước: LITERAL (Hằng) trong SQL Server
Bài tiếp: SEQUENCE trong SQL Server