Saturday, July 20, 2019

P1. Hướng dẫn lập trình SQL Server Transact-SQL

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).
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:
1
2
3
4
5
6
7
8
9
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ụ:
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_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:
1
2
3
4
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.
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
26
27
28
29
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ụ:
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
26
27
28
29
30
31
32
33
34
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.
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
26
27
28
29
30
31
32
33
34
35
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ụ:


Over 50 Ebooks Excel and VBA free Download

1. Statistics and Probability for Engineering Applications With Microsoft Excel by W.J. DeCoursey - PDF Free Download Download Siz...