T-SQL 详解
T-SQL 是 Transact-SQL 的缩写,是 Microsoft SQL Server 和 Sybase 数据库使用的扩展版 SQL。
一、全称与词源
| 缩写 | 全称 | 中文 |
|---|---|---|
| T | Transact | 事务处理、执行 |
| SQL | Structured Query Language | 结构化查询语言 |
词源拆解
| 单词 | 词源 | 含义 |
|---|---|---|
| Transact | 拉丁语 trans(横穿)+ agere(做) | 办理、执行事务 |
| Transact | 是 Transaction(事务)的动词形式 | 进行事务处理 |
| SQL | 标准缩写 | 数据库查询语言 |
字面意思:能够处理事务的 SQL 扩展语言
二、T-SQL 与 SQL 的关系
text
┌─────────────────────────────────────────────────────────────┐ │ │ │ SQL(标准) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ SELECT * FROM users │ │ │ │ INSERT INTO orders ... │ │ │ │ UPDATE products ... │ │ │ │ DELETE FROM logs ... │ │ │ └─────────────────────────────────────────────────────┘ │ │ + │ │ T-SQL 扩展功能 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 变量 DECLARE @count INT = 0 │ │ │ │ • 条件判断 IF ... ELSE │ │ │ │ • 循环 WHILE ... │ │ │ │ • 事务 BEGIN TRANSACTION ... COMMIT │ │ │ │ • 错误处理 TRY...CATCH │ │ │ │ • 存储过程 CREATE PROCEDURE │ │ │ │ • 函数 CREATE FUNCTION │ │ │ │ • 触发器 CREATE TRIGGER │ │ │ └─────────────────────────────────────────────────────┘ │ │ = │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ T-SQL(Transact-SQL) │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘
三、标准 SQL 做不到,T-SQL 能做到的事
| 功能 | 标准 SQL | T-SQL |
|---|---|---|
| 变量 | ❌ 不支持 | ✅ DECLARE @count INT |
| 条件分支 | ❌ 不支持 | ✅ IF...ELSE、CASE |
| 循环 | ❌ 不支持 | ✅ WHILE |
| 事务控制 | 有限支持 | ✅ BEGIN TRAN、COMMIT、ROLLBACK |
| 错误捕获 | ❌ 不支持 | ✅ BEGIN TRY...BEGIN CATCH |
| 存储过程 | 无统一标准 | ✅ 完整支持 |
| 自定义函数 | ❌ 不支持 | ✅ 支持 |
四、T-SQL 代码示例
sql
-- 这是 T-SQL,用到了标准 SQL 没有的功能DECLARE @count INT = 0; -- 变量DECLARE @max_id INT;SELECT @max_id = MAX(id) FROM orders; -- 查询结果存入变量IF @max_id > 1000 -- 条件判断BEGIN PRINT '订单数量超过1000' WHILE @count < 10 -- 循环 BEGIN INSERT INTO logs VALUES (@count, GETDATE()) SET @count = @count + 1 ENDENDELSEBEGIN PRINT '订单数量正常'END
五、T-SQL 的特色语句
| 语句 | 作用 | 示例 |
|---|---|---|
DECLARE | 声明变量 | DECLARE @name VARCHAR(50) |
SET | 给变量赋值 | SET @name = '张三' |
PRINT | 输出信息 | PRINT '处理完成' |
BEGIN TRAN | 开始事务 | BEGIN TRANSACTION |
COMMIT | 提交事务 | COMMIT |
ROLLBACK | 回滚事务 | ROLLBACK |
BEGIN TRY | 开始错误捕获 | BEGIN TRY |
THROW | 抛出错误 | THROW 50001, '出错了', 1 |
EXEC | 执行存储过程 | EXEC sp_help |
OUTPUT | 输出参数 | @result INT OUTPUT |
六、与其他 SQL 方言的对比
| 数据库 | 扩展语言 | 特点 |
|---|---|---|
| SQL Server | T-SQL | 变量、循环、错误处理丰富 |
| Oracle | PL/SQL | 过程式编程,功能强大 |
| PostgreSQL | PL/pgSQL | 接近 PL/SQL 语法 |
| MySQL | 存储过程 | 功能相对较弱 |
语法对比示例(循环)
T-SQL:
sql
DECLARE @i INT = 1WHILE @i <= 10BEGIN PRINT @i SET @i = @i + 1END
PL/SQL(Oracle):
sql
DECLARE i NUMBER := 1;BEGIN LOOP DBMS_OUTPUT.PUT_LINE(i); i := i + 1; EXIT WHEN i > 10; END LOOP;END;
七、Transact 的词源深度解析

同源词:transaction(事务)、actor(行动者)、agent(代理人)
八、T-SQL 的历史背景
| 时间 | 事件 |
|---|---|
| 1970s | SQL 由 IBM 发明 |
| 1986 | ANSI 发布 SQL 标准 |
| 1988 | Sybase 发布 T-SQL 命名版本 |
| 1989 | Microsoft 与 Sybase 合作开发 SQL Server |
| 1990s | Microsoft 独立发展 T-SQL |
| 至今 | T-SQL 是 SQL Server 的核心语言 |
九、总结
| 问题 | 答案 |
|---|---|
| T-SQL 是什么? | Microsoft SQL Server 使用的 SQL 扩展语言 |
| 全称是什么? | Transact-SQL |
| 词源 | Transact(办理事务)+ SQL(查询语言) |
| 与 SQL 的关系 | SQL 是基础,T-SQL 在 SQL 基础上增加了编程能力 |
| 增加了什么? | 变量、循环、条件、事务控制、错误处理、存储过程 |
| 谁在用? | SQL Server、Sybase 数据库 |
一句话总结:T-SQL = 标准 SQL + 编程能力。Transact 来自拉丁语“办理、执行”,强调的是能够处理完整业务事务的能力。如果说 SQL 只是“问问题的语言”,T-SQL 就是“写程序的数据库语言”——你可以在数据库里直接写循环、做判断、处理错误、管理事务,就像写编程语言一样