1- Transact-SQL là gì
Transact-SQL (còn gọi là T-SQL) là một ngôn ngữ lập trình database hướng thủ tục độc quyền của Microsoft sử dụng trong SQL Server.
Ngôn ngữ thủ tục được thiết kế để mở rộng khả năng của SQL trong khi có khả năng tích hợp tốt với SQL. Một số tính năng như các biến địa phương và xử lý chuỗi/dữ liệu được thêm vào. Các tính năng này làm cho ngôn ngữ Transact-SQL là Turing-complete(**).
Chúng cũng được sử dụng để viết các thủ tục lưu trữ: Một đoạn code nằm trên máy chủ để quản lý các quy tắc kinh doanh phức tạp mà khó hoặc không thể làm nổi với các thao tác tập hợp thuần thúy (pure set-based operations).
Ngôn ngữ thủ tục được thiết kế để mở rộng khả năng của SQL trong khi có khả năng tích hợp tốt với SQL. Một số tính năng như các biến địa phương và xử lý chuỗi/dữ liệu được thêm vào. Các tính năng này làm cho ngôn ngữ Transact-SQL là Turing-complete(**).
Chúng cũng được sử dụng để viết các thủ tục lưu trữ: Một đoạn code nằm trên máy chủ để quản lý các quy tắc kinh doanh phức tạp mà khó hoặc không thể làm nổi với các thao tác tập hợp thuần thúy (pure set-based operations).
Một hệ thống Turing-Complete có nghĩa là một hệ thống trong đó một chương trình có thể được viết ra và sẽ tìm thấy câu trả lời (mặc dù không có sự bảo đảm về thời gian chạy hoặc bộ nhớ).
2- Tổng quan về Transact-SQL
T-SQL tổ chức theo từng khối lệnh, một khối lệnh có thể lồng bên trong một khối lệnh khác, một khối lệnh bắt đầu bởi BEGIN và kết thúc bởi END, bên trong khối lệnh có nhiều lệnh, và các lệnh ngăn cách nhau bởi dấu chấm phẩy.
Cấu trúc khối lệnh:
1
2
3
4
| BEGIN -- Khai báo biến -- Các câu lệnh T-SQL END ; |
3- Bắt đầu với SQL Server Management Studio
Trong tài liệu này tôi sẽ hướng dẫn bạn lập trình SQL Server, trên công cụ trực quan SQL Server Management Studio.
Đây là hình ảnh SQL Server Management Studio trong khi bạn mới mở nó. Có một số database ví dụ có sẵn khi bạn cài đầy đủSQLServer.
Hoặc bạn có thể tạo learningsql, một cơ sở dữ liệu nhỏ được sử dụng trong một vài tài liệu hướng dẫn SQLServer trêno7planning.org.
Nhấn phải chuột vào một database, chọn "New Query" để mở ra một cửa sổ làm việc với database này.
Bạn đã sẵn sàng với lập trình database với SQL Server.
Dưới đây là một khối lệnh đơn giản, tính tổng 2 số:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| Begin -- Khai báo một biến Declare @v_Result Int ; -- Khai báo một biến có giá trị 50 Declare @v_a Int = 50; -- Khai báo một biến có giá trị 100 Declare @v_b Int = 100; -- In ra màn hình Console (Dùng cho lập trình viên). -- Sử dụng Cast để ép kiểu Int về kiểu chuỗi. -- Sử dụng toán tử + để nối 2 chuỗi. Print 'v_a= ' + Cast (@v_a as varchar (15)); -- In ra màn hình Console Print 'v_b= ' + Cast (@v_b as varchar (15)); -- Tính tổng Set @v_Result = @v_a + @v_b; -- In ra màn hình Console Print 'v_Result= ' + Cast (@v_Result as varchar (15)); End ; |
Nhấn biểu tượng để thực thi khối lệnh, và xem kết quả trên SQL Server Management Studio:
4- Các lệnh Transact-SQL cơ bản
Ở đây tôi giới thiệu tổng quan về các lệnh cơ bản của T-SQL. Bạn sẽ hiểu hơn về nó thông qua các ví dụ ở các phần tiếp theo.
4.1- Câu Lệnh rẽ nhánh If-elsif-else
- Cú pháp:
- 123456789
IF <điều kiện 1>
Khối lệnh 1;
[
ELSE
IF <điều kiện 2>
Khối lệnh 2;
]
....
[
ELSE
Khối lệnh n + 1;
]
- Ví dụ:
- 12345678910111213141516171819202122232425
BEGIN
-- Khai báo một biến
DECLARE
@v_Option
integer
;
DECLARE
@v_Action
varchar
(30);
SET
@v_Option = 2;
IF @v_Option = 1
SET
@v_Action =
'Run'
;
ELSE
IF @v_Option = 2
BEGIN
PRINT
'In block else if @v_Option = 2'
;
SET
@v_Action =
'Backup'
;
END
;
ELSE
IF @v_Option = 3
SET
@v_Action =
'Stop'
;
ELSE
SET
@v_Action =
'Invalid'
;
-- Ghi ra log
PRINT
'@v_Action= '
+ @v_Action;
END
;
- Kết quả chạy ví dụ:
4.2- Vòng lặp WHILE
- Cú pháp:
- 1234
WHILE condition
BEGIN
-- ...statements...
END
;
- Trong vòng lặp WHILE bạn có thể sử dụng BREAK để thoát ra khỏi vòng lặp.
Sử dụng lệnh CONTINUE để bỏ qua các dòng lệnh trong khối WHILE và ở bên dưới nó, để tiếp tục một vòng lặp mới. - 1234567891011121314151617181920212223242526272829
BEGIN
-- Khai báo 2 biến x và y.
DECLARE
@x
integer
= 0;
DECLARE
@y
integer
= 10;
-- Bước
DECLARE
@step
integer
= 0;
-- Trong khi @x < @y
WHILE (@x < @y)
BEGIN
SET
@step = @step + 1;
-- Mỗi lần vòng lặp chạy giá trị của x tăng lên 1
SET
@x = @x + 1;
-- Mỗi lần vòng lặp chạy giá trị của y giảm đi 2
SET
@y = @y - 2;
PRINT
'Step ='
+
CAST
(@step
AS
varchar
(10));
PRINT
'@x ='
+
CAST
(@x
AS
varchar
(10)) +
' / @y = '
+
CAST
(@y
AS
varchar
(10));
END
;
-- Ghi ra log
PRINT
'x,y = '
+
CAST
(@x
AS
varchar
(10)) +
', '
+
CAST
(@y
AS
varchar
(10));
END
;
Kết quả chạy ví dụ: - BREAK là lệnh cho phép thoát ra khỏi vòng lặp, dưới đây là ví dụ:
- 12345678910111213141516171819202122232425262728293031323334
BEGIN
-- Khai báo 2 biến x và y.
DECLARE
@x
integer
= 0;
DECLARE
@y
integer
= 10;
-- Bước
DECLARE
@step
integer
= 0;
-- Trong khi @x < @y
WHILE (@x < @y)
BEGIN
SET
@step = @step + 1;
-- Mỗi lần vòng lặp chạy giá trị của x tăng lên 1
SET
@x = @x + 1;
-- Mỗi lần vòng lặp chạy giá trị của y giảm đi 2
SET
@y = @y - 2;
PRINT
'Step ='
+
CAST
(@step
AS
varchar
(10));
PRINT
'@x ='
+
CAST
(@x
AS
varchar
(10)) +
' / @y = '
+
CAST
(@y
AS
varchar
(10));
-- Nếu @x > 2 thì thoát ra khỏi vòng lặp
-- (Mặc dù điều kiện trong WHILE vẫn đúng).
IF @x > 2
BREAK;
END
;
-- Ghi ra log
PRINT
'x,y = '
+
CAST
(@x
AS
varchar
(10)) +
', '
+
CAST
(@y
AS
varchar
(10));
END
;
- Kết quả chạy ví dụ:
- Lệnh CONTINUE cho phép bỏ qua các câu lệnh bên dưới nó (vẫn trong vòng lặp) để tiếp tục vòng lặp mới.
- 1234567891011121314151617181920212223242526272829303132333435
BEGIN
-- Khai báo 2 biến x và y.
DECLARE
@x
integer
= 0;
DECLARE
@y
integer
= 10;
-- Bước
DECLARE
@step
integer
= 0;
-- Trong khi @x < @y
WHILE (@x < @y)
BEGIN
SET
@step = @step + 1;
-- Mỗi lần vòng lặp chạy giá trị của x tăng lên 1
SET
@x = @x + 1;
-- Mỗi lần vòng lặp chạy giá trị của y giảm đi 2
SET
@y = @y - 2;
-- Nếu @x < 3 thì bỏ qua các dòng lệnh bên dưới
-- Tiếp tục vòng lặp mới.
IF @x < 3
CONTINUE
;
-- Nếu @x < 3 các dòng lệnh bên dưới CONTINUE sẽ không được chạy.
PRINT
'Step ='
+
CAST
(@step
AS
varchar
(10));
PRINT
'@x ='
+
CAST
(@x
AS
varchar
(10)) +
' / @y = '
+
CAST
(@y
AS
varchar
(10));
END
;
-- Ghi ra log
PRINT
'x,y = '
+
CAST
(@x
AS
varchar
(10)) +
', '
+
CAST
(@y
AS
varchar
(10));
END
;
- 5- Gán dữ liệu truy vấn được vào biến
Các biến có thể được gán giá trị từ một câu truy vấn. Dưới đây là một ví dụ minh họa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| BEGIN -- Khai báo một biến @v_Emp_ID DECLARE @v_Emp_ID integer = 1; DECLARE @v_First_Name varchar (30); DECLARE @v_Last_Name varchar (30); DECLARE @v_Dept_ID integer ; -- Gán giá trị cho các biến lấy từ câu lệnh Select. SELECT @v_First_Name = emp.First_Name, @v_Last_Name = emp.Last_Name, @v_Dept_Id = emp.Dept_Id FROM Employee Emp WHERE Emp.Emp_ID = @v_Emp_Id; -- In ra các giá trị: PRINT '@v_First_Name = ' + @v_First_Name; PRINT '@v_Last_Name = ' + @v_Last_Name; PRINT '@v_Dept_Id = ' + CAST (@v_Dept_ID AS varchar (15)); END ; |
Kết quả chạy ví dụ: