Sử dụng các khối IF và WHILE để kiểm soát dòng chương trình
Tất cả các ngôn ngữ lập trình bao gồm các yếu tố giúp bạn xác định luồng của chương trình hoặc thứ tự thực thi các câu lệnh. Mặc dù không được tích hợp đầy đủ như các ngôn ngữ như C#, T-SQL cung cấp một tập hợp các từ khóa điều khiển dòng mà bạn có thể sử dụng để thực hiện kiểm tra lô-gic và tạo vòng lặp chứa câu lệnh thao tác dữ liệu T-SQL của bạn. Trong bài học này, bạn sẽ tìm hiểu cách sử dụng các từ khóa T-SQL IF và WHILE.
Hiểu rõ về điều khiển T-SQL của ngôn ngữ dòng
SQL Server cung cấp các thành phần ngôn ngữ kiểm soát dòng thực hiện chương trình trong các lô T-SQL, thủ tục được lưu trữ và các hàm do người dùng xác định. Những yếu tố kiểm soát dòng này có nghĩa là bạn có thể xác định lập trình xem có nên thực thi các câu lệnh hay không và xác định trình tự của những câu lệnh cần được thực thi.
Các thành phần này bao gồm, nhưng không giới hạn ở:
- NẾU... ELSE, thực thi mã dựa trên biểu thức Boolean.
- WHILE, tạo ra một vòng lặp thực thi cung cấp một điều kiện là đúng.
- BẮT ĐẦU... END, định nghĩa một chuỗi các câu lệnh T-SQL cần được thực thi cùng nhau.
- Các từ khóa khác, ví dụ: BREAK, CONTINUE, WAITFOR và RETURN, được sử dụng để hỗ trợ các thao tác điều khiển-của-dòng T-SQL.
Dưới đây là ví dụ về câu lệnh IF:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Sử dụng lô-gic có điều kiện trong chương trình của bạn bằng cách sử dụng IF... KHÁC
Hàm IF... Cấu trúc ELSE được sử dụng trong T-SQL để thực thi có điều kiện một khối mã dựa trên một vị từ. Câu lệnh IF xác định có hay không câu lệnh hay khối sau đây (nếu BEGIN... End được sử dụng) thực thi. Nếu vị từ định trị là TRUE, mã trong khối được thực thi. Khi vị từ định trị là FALSE hoặc UNKNOWN, khối sẽ không được thực thi, trừ khi từ khóa ELSE tùy chọn được sử dụng để xác định một khối mã khác.
Trong câu lệnh IF sau đây, chúng tôi sẽ hỏi cơ sở dữ liệu liệu OBJECT_ID is NULL hay không, và nếu có, hãy trả về câu lệnh PRINT. Trong ví dụ này, đối tượng NOT là null và do đó FALSE, có nghĩa là mã BEGIN/END sẽ không được thực thi. Câu lệnh PRINT sẽ chỉ được thực hiện nếu đối tượng không tồn tại trong cơ sở dữ liệu.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Do các giới hạn với mã ở trên chỉ với câu lệnh IF, điều này có thể gây nhầm lẫn. Việc kết hợp IF và ELSE giúp bạn linh hoạt hơn với lô-gic trong mã và bạn có thể sử dụng nhiều câu lệnh ELSE. Với việc sử dụng ELSE, bạn có một tùy chọn thực thi khác khi xác lập IF định trị là FALSE hoặc UNKNOWN, như trong ví dụ sau đây:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
Trong các thao tác thao tác dữ liệu, sử dụng hàm IF với từ khóa EXISTS có thể là một công cụ hữu ích để kiểm tra sự tồn tại hiệu quả, như trong ví dụ sau đây:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Tìm hiểu cách tạo vòng lặp bằng câu lệnh WHILE
Câu lệnh WHILE được sử dụng để thực thi mã trong một vòng lặp dựa trên một vị từ. Giống như câu lệnh IF, câu lệnh WHILE sẽ xác định liệu câu lệnh hoặc khối sau đây (nếu BEGIN... End được sử dụng) thực thi. Vòng lặp tiếp tục thực hiện miễn là điều kiện định trị là TRUE. Thông thường, bạn kiểm soát vòng lặp với một biến được kiểm tra bởi các vị từ và thao tác trong cơ thể của vòng lặp chính nó.
Ví dụ sau đây sử dụng @empid biến số trong vị từ và thay đổi giá trị của nó trong HÀM BEGIN... Khối KẾT THÚC:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Đối với các tùy chọn bổ sung trong vòng lặp WHILE, bạn có thể sử dụng các từ khóa CONTINUE và BREAK để kiểm soát dòng.