Biến là một đối tượng trong tập lệnh T-SQL mà nó dùng để lưu trữ dữ liệu. Sau khi biến
đã được khai báo hoặc định nghĩa, một câu lệnh trong tập lệnh sẽ gán giá trị cho biến và
cũng có thể một câu lệnh khác sẽ lấy giá trị của biến ra dùng. Phải được khai báo trước
khi dùng.
Biến được dùng để:
– Đếm số lần lặp được thực hiện hoặc dùng để điều khiển vòng lặp
– Dùng lưu giá trị dữ liệu được kiểm tra một số lệnh điều khiển
– Lưu trữ giá trị trả về từ một store Procedure
– ……
Các loại biến: có 2 loại biến là biến cục bộ (local) và biến toàn cục (Global). Biến kiểu
Global được SQL Server đưa ra và bạn có thể dùng bất cứ khi nào và cũng không cần
khai báo (được xem như là những hàm chuẩn của SQl Server).
Local variable
– Được khai báo trong phần thân của một bó lệnh hoặc một thủ tục.
– Phạm vi hoạt động của biến bắt đầu từ điểm mà nó được khai báo cho đến khi kết
thúc một lô (batch) hoặc stored procedure hoặc Function mà nó được khai báo.
– Tên của biến bắt đầu @
Khai báo:
DECLARE @var_name var_type
Gán giá trị cho biến:
Nếu biến vừa khai báo xong thì biến mặc nhiên được gán giá trị là NULL.
Để gán biến ta dùng lệnh SET hoặc dùng câu lệnh SELECT
SET @var_name =expression
SELECT { @var_name =expression } [,…n ]
Ví dụ 1:
USE Northwind
DECLARE @EmpIDVar INT
SET @EmpIDVar=3
SELECT * FROM [Orders]
WHERE
Ví dụ 2:
DECLARE MyVariable INT
SET @MyVariable = 1
GO – điểm kết thúc một lô batch.
— @MyVariable đã vượt quá phạm vi và nó đã hết
tồn tại
— Câu lệnh SELECT sau sẽ nhận lỗi sai cú pháp bởi
vì nó không tham chiếu được biến @MyVariable.
SELECT * FROM [Orders]
WHERE
Ví dụ 3:
USE Northwind
GO
DECLARE @FirstNameVariable NVARCHAR(20),
@RegionVariable NVARCHAR(30)
— Gán giá trị cho 2 biến.
SET @FirstNameVariable = N’Anne’
SET @RegionVariable = N’WA’
— Dùng chúng trong mệnh đề WHERE của lệnh SELECT.
SELECT LastName, FirstName, Title
FROM Employees
WHERE FirstName = @FirstNameVariable
OR Region = @RegionVariable
GO
Ví dụ 4:
USE Northwind
GO
— Khai báo 1 biến
DECLARE @EmpIDVariable INT
— Gán giá trị biến bằng câu lệnh Select
SELECT @EmpIDVariable = MAX(EmployeeID)
FROM Employees
GO
—Nếu câu Select trả về là một tập giá trị thì biến sẽ nhận giá trị sau cùng.
Ví dụ 5:
DECLARE @ProdIDVariable int
SELECT @ProdIDVariable = ProductID
FROM Northwind..Products
Ví dụ 6:
USE Northwind
GO
DECLARE @EmpIDVariable INT
SELECT @EmpIDVariable = EmployeeID
FROM Employees
ORDER BY EmployeeID DESC
SELECT @EmpIDVariable
GO
Global variable trong SQL Server 2000 gọi là System Function: Từ SQL Server 7.0
biến Global được định nghĩa như là hàm hệ thống. Mỗi kết nối sẽ tạo ra một session, SQL
Server tạo ra sẳn một số biến có sẳn rất tiện ích trong việc lập trình và quản trị hệ thống.
Các biến này không có kiểu, tên bắt đầu @@.
@@VERSION phiên bản của SQL Server và hệ điều hành
SELECT @@VERSION
@@TRANCOUNT Xem coi có bao nhiêu transaction đang mơ
IF (@@TRANCOUNT > 0)
BEGIN
RAISERROR(‘Task cannot be executed within a
transaction.’, 10, 1)
RETURN
END
@@ROWCOUNT Trả về số dòng bị ảnh h ưởng đối với lệnh thực thi gần nhất
Ví dụ 1:
USE Northwind
UPDATE Employees SET LastName = ‘Brooke’
WHERE LastName = ‘Brook’
IF (@@ROWCOUNT = 0)
BEGIN
PRINT ‘Warning: No rows were updated’
RETURN
END
Ví dụ 2:
UPDATE Customers
SET Phone =’030’ + Phone
WHERE Country=’Germany’
PRINT @@ROWCOUNT
@@IDENTITY trả về số Identity phát sinh sau cùng
CREATE TABLE TABLE_HD
( mahd int Identity Primary Key,
Ghichu varchar(20) )
CREATE TABLE TABLE_CTHD
( Mahd int, Masp char(10), Soluong int)
declare @maso Int
Insert into Table_HD Values (‘Mau tin 1’)
Insert into Table_HD Values (‘Mau tin 2’)
set @maso= @@IDENTITY
Insert into Table_CTHD
values (@maso, ‘sp001’,5)
Insert into Table_CTHD
values (@maso, ‘sp002’,10)
— Kiểm tra
SELECT * FROM Table_CTHD
@@ERROR Trả về lỗi số (STT lỗi) của lệnh sau cùng mà SQL thực thi, là 0 có nghĩa là
câu lệnh thực thi hoàn thành.
@@FETCH_STATUS Trả về trạng thái của lệnh Fetch của biến con trỏ có thành công hay không
(0: Thành công, -1: bị lỗi hoặc vượt quá phạm vi; -2: Thất bại)
Một số hàm thường dùng:
GetDate() Lấy ngày, giờ hiện hành của hệ thống
Month(Date); Year(Date) Lấy tháng, năm của ngày Date
DateAdd(Datepart, Number, Date) Cộng thêm Date một giá trị số
DATEDIFF (datepart, startdate, enddate) Khoảng chênh lệch giữa startdate và enddate
DATEPART(datepart, date) Trả về số nguyên biểu diễn datepart nào đó của
ngày được chỉ định
CAST(expression AS data_type) Dùng để chuyển đổi kiểu dữ liệu
CONVERT(data_type[(length)],expression
[,style]) Dùng để chuyển đổi kiểu dữ liệu
LOWER(character_expression) Chuyển sang chữ thường
UPPER(character_expression) Chuyển sang chữ hoa
REPLACE(‘string_expression1‘,
‘string_expression2‘, ‘string_expression3‘) Thay thế chuỗi biểu thức
DIFFERENCE(character_expression,
character_expression) So sánh 2 biểu thức
Ví dụ:
USE pubs
SELECT ‘The price is ‘ + CAST(price AS
varchar(12))
FROM titles
WHERE price > 10.00
GO
— Use CONVERT.
USE pubs
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE ‘3%’
GO