SQL (Structured Query Language) là ngôn ngữ chuẩn ANSI/ISO cho cơ sở dữ liệu quan hệ — phi thủ tục, khai báo cái gì (what). T-SQL (Transact-SQL) là phần mở rộng thủ tục (procedural extension) của Microsoft cho SQL Server — thêm biến, vòng lặp, xử lý lỗi, transaction, cho phép viết như thế nào (how).
Bảng so sánh
| # | Tiêu chí | SQL (Chuẩn) | T-SQL (SQL Server) |
|---|---|---|---|
| 1 | Loại ngôn ngữ | Phi thủ tục (Non-procedural / Declarative) | Thủ tục (Procedural) |
| 2 | Khả năng mở rộng | Chỉ DML, DDL, DQL cơ bản | Viết Procedure, Function, biến cục bộ, điều khiển luồng |
| 3 | Tính độc quyền | Mở, chung cho mọi RDBMS | Độc quyền (Proprietary) của Microsoft SQL Server |
| 4 | Thực thi truy vấn | Gửi từng câu lệnh một | Gửi hàng loạt (batch) nhiều câu lệnh cùng lúc |
| 5 | Tính năng bổ sung | DDL, DML, DQL | Transaction control, Exception handling, Dynamic SQL, Table variables, ... |
Chi tiết các khác biệt chính
1. Biến và điều khiển luồng
-- Chỉ có trong T-SQL
BEGIN TRY
INSERT INTO Table1 VALUES (1);
INSERT INTO Table2 VALUES (2); -- Có thể lỗi
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
3. Dynamic SQL
-- T-SQL đặc thù DECLARE @temp TABLE (Id INT, Name VARCHAR(50)); INSERT INTO @temp SELECT Id, Name FROM Users WHERE Active = 1;
Tương đương ở các RDBMS khác
| RDBMS | Ngôn ngữ thủ tục |
|---|---|
| Oracle | PL/SQL |
| PostgreSQL | PL/pgSQL |
| MySQL | MySQL Stored Program Language (SQL/PSM) |
| DB2 | SQL PL |
Khi nào dùng T-SQL thay vì SQL thuần?
- Logic nghiệp vụ phức tạp cần chạy gần dữ liệu (giảm network round-trip).
- Cần transaction, xử lý lỗi, vòng lặp, điều kiện.
- Báo cáo, ETL, maintenance jobs chạy định kỳ trên SQL Server.
Lưu ý: Code T-SQL không thể chạy trực tiếp trên MySQL, PostgreSQL, Oracle — phải viết lại theo dialect của từng hệ (PL/pgSQL, PL/SQL, v.v.).