第1章 SQL Server 2000的历史及特点 1
1.1 数据库发展简史 1
1.1.1 数据库类型 1
1.1.2 关系数据库发展史 2
1.2 SQL Server 2000简介 3
1.2.1 版本说明 4
1.2.2 对硬件和操作系统的要求 6
1.3 建立数据库连接系统 6
1.3.1 单层结构(主机系统) 7
1.3.2 2-层结构(客户/服务器结构) 7
1.3.3 3-层结构 9
1.3.4 N-层结构 10
1.4 数据存取模型 11
1.5 小结 12
2.1 数据库对象概述 13
第2章 SQL Server数据库的组成 13
2.1.1 数据库对象 14
2.1.2 事务日志 16
2.1.3 表——最基本的数据库对象 17
2.1.4 文件组 18
2.1.5 关系表 19
2.1.6 视图 19
2.1.7 存储过程 20
2.1.8 用户自定义函数 21
2.1.9 用户和角色 21
2.1.10 规则 21
2.1.11 默认值 21
2.1.12 用户定义数据类型 22
2.1.13 全文目录 22
2.2 SQL Server的数据类型NULL值 25
2.3.2 命名规则 26
2.3 SQL Server的对象标识符 26
2.3.1 已经被命名的对象 26
2.4 小结 27
第3章 实用工具 28
3.1 联机丛书 28
3.2 客户和服务器网络实用工具 29
3.2.1 协议 30
3.2.2 客户端配置 33
3.3 企业管理器 34
3.4 数据转换服务(DTS) 35
3.5 大容量拷贝程序 35
3.6 MS DTC管理控制台 35
3.7 SQL Server Profiler 36
3.8 查询分析器 36
3.8.1 开始连接 36
3.8.2 建立连接 38
3.9 OSQL 42
3.10 服务管理器 43
3.11 sqlmaint工具 44
3.12 小结 44
第4章 T-SQL基础语句 45
4.1 最基本的SELECT语句 45
4.1.1 SELECT语句和FROM从句 46
4.1.2 WHERE从句 48
4.1.3 ORDER BY从句 51
4.1.4 利用GROUP BY从句聚集数据 53
4.1.5 利用HAVING从句在分组上放置条件 60
4.1.6 用FORXML从句输出XML 62
4.1.7 利用OPTION从句的提示信息 63
4.1.8 DISTINCT和ALL谓词 63
4.2 INSERT语句NSERT INTO…SELECT语句 68
4.3 用UPDATE语句更新数据 70
4.4 DELETE语句 72
4.5 小结 73
第5章 联接表 74
5.1 联接 74
5.2 内部联接INNERJOIN类似于WHERE从句 78
5.3 外部联接 82
5.3.1 简单的OUTER JOIN 82
5.3.2 查找落孤记录或不匹配的记录 84
5.3.3 处理更复杂的OUTER JOIN 87
5.4 完全联接 95
5.5 交叉联接 96
5.6 探讨联接的替代语法 97
5.6.1 INNER JOIN的替代语法 97
5.6.2 OUTER JOIN的替代语法 98
5.6.3 CROSS JOIN的替代语法 98
5.7 联合 99
5.8 小结 103
第6章 创建和修改表 105
6.1 SQLServer的对象名 105
6.1.1 所有者 105
6.1.2 数据库名 107
6.1.3 用服务器命名 107
6.1.4 回顾默认值 107
6.2 CREATE语句 108
6.2.1 创建数据库 108
6.2.2 创建表 112
6.3 ALTER语句 121
6.3.1 ALTER DATABASE命令 121
6.3.2 更改表 123
6.4 DROP语句 126
6.5 使用GUI 工具 126
6.5.1 利用EM创建数据库 127
6.5.2 返回到编码:利用EM创建脚本的基础 132
6.6 小结 137
第7章 约束 138
7.1 约束类型 139
7.1.1 域约束 139
7.1.2 实体约束 139
7.1.3 引用完整性约束 140
7.2 约束名 140
7.3 键约束 141
7.3.1 主键约束 141
7.3.2 外部键约束 144
7.3.3 惟一性约束 159
7.4 CHECK约束 159
7.5 默认约束 160
7.5.1 在创建表的语句中定义默认约束 161
7.6.1 创建约束时忽略坏数据 162
7.5.2 在现有表上添加默认约束 162
7.6 禁用约束 162
7.6.2 临时禁用现有约束 166
7.7 规则和默认值 168
7.7.1 规则 168
7.7.2 默认值 169
7.7.3 决定哪张表和哪种数据类型使用给定规则或默认值 170
7.8 维护数据完整性的触发器 170
7.9 比较 170
7.10 小结 171
第8章 视图 172
8.1 简单视图 172
8.2 视图作为过滤器 178
8.3 更复杂的视图 180
8.3.2 利用视图修改数据 184
8.3.1 DATEADD和CONVERT函数 184
8.4 利用T-SQL编辑视图 187
8.5 删除视图 188
8.6 在EM 中创建和编辑视图 188
8.6.1 在EM中创建视图 188
8.6.2 在EM中编辑视图 191
8.7 审核 192
8.8 保护代码——加密视图 193
8.9 架构绑定 195
8.10 使用VIEW_METADATA 195
8.11 索引视图 195
8.12 小结 198
第9章 脚本和批处理 199
9.1 编写脚本的基础 199
9.1.1 USE语句 203
9.1.2 声明变量 203
9.1.3 使用@@IDENTITY 207
9.1.4 使用@@ROWCOUNT 215
9.2 批处理 216
9.2.1 另起一行 217
9.2.2 每个批处理都被独立地发送到服务器上 217
9.2.3 GO不是一个T-SQL命令 220
9.2.4 批处理中的错误 220
9.2.5 何时使用批处理 221
9.3 OSQL 225
9.4 动态SQL 226
9.5 EXEC的限制 228
9.5 小结 231
第10章 存储过程 232
10.1 创建存储过程 232
10.1.1 基本语法 232
10.2 利用ALTER改变存储过程 233
10.1.2 基本存储过程的例子 233
10.3 删除存储过程 234
10.4 参数化 234
10.5 流控制语句 239
10.5.1 IF…ELSE语句 239
10.5.2 CASE语句 253
10.5.3 利用WHILE语句循环 256
10.5.4 WAITFOR语句 257
10.6 存储过程的返回值怎样使用RETURN 258
10.7 异常处理 260
10.7.1 处理内嵌错误 260
10.7.2 在错误发生之前处理错误 268
10.7.3 手工提示错误 272
10.7.4 添加自己定制的错误消息 275
10.8.1 创建可调用的处理 279
10.8 过程的用途 279
10.8.2 因为安全性使用sproc 281
10.8.3 存储过程和性能 282
10.9 扩展的存储过程(XPs) 284
10.9.1 xp_cmdshell 284
10.9.2 xp_msver 285
10.10 系统存储过程 287
10.11 递归 289
10.12 调试 291
10.12.1 为调试安装SQL Server 292
12.12.2 启动调试器 292
10.12.3 调试器的组成部分 294
10.12.4 使用调试器 296
10.13 小结 300
第11章 用户自定义函数 301
11.1 UDF的基本概念 301
11.2 返回标量值的UDF 302
11.3 返回表的UDF 305
11.4 理解确定论 310
11.5 “系统”函数 312
11.5.1 创建“系统”函数 312
11.5.2 在创建之后删除“系统”函数 314
11.5 小结 314
第12章 触发器 315
12.1 触发器定义HECK 315
12.1.1 ON从句 316
12.1.2 WITH ENCRYPTION选项 316
12.1.3 FOR|AFTER从句与INSTEAD OF从句 317
12.1.4 WITH APPEND选项 318
12.2.1 使用触发器维护简单引用的完整性 319
12.2 使用触发器维护引用的完整性规则 319
12.1.6 AS关键词 319
12.1.5 NOTFOR REPLICATION选项 319
12.2.2 使用触发器得到更灵活的引用完整性 325
12.3 使用触发器维护数据的完整性规则 336
12.3.1 处理其他表的请求 336
12.3.2 使用触发器检查被更新的中间数据 337
12.3.3 使用触发器定制错误信息 339
12.4 触发器的其他常见用途 340
12.4.1 更新摘要信息 340
12.4.2 为产生报表把数据插入到降低范式化的表中 340
12.4.3 设置条件标志 340
12.5 其他触发器问题 342
12.5.1 触发器可以嵌套 342
12.5.2 触发器可以递归 343
12.5.3 触发器不改变结构 343
12.5.4 不经删除就可以关闭触发器 343
12.5.5 触发器的触发顺序 344
12.6.1 INSTEAD OF INSERT触发器 345
12.6 INSTEAD OF触发器 345
12.6.2 INSTEAD OF UPDATE触发器 351
12.6.3 INSTEAD OF DELETE触发器 352
12.7 性能考虑 353
12.7.1 触发器是被动的而不是主动的 353
12.7.2 触发器与激活它们的进程之间没有并发性问题 354
12.7.3 使用UPDATE()函数和UPDATED COLUMNS()函数 354
12.7.4 保持触发器简洁 356
12.7.5 在选择索引时不要忘记触发器 356
12.7.6 7.0以前联接触发器对表数量的限制 356
12.7.7 尽量不要在触发器中回滚 357
12.8 删除触发器 357
12.9 调试触发器 357
12.10 小结 358
13.1 游标的定义 359
第13章 SQL游标 359
13.2 游标的范围 360
13.3 游标类型和扩展声明语法 363
13.3.1 范围 363
13.3.2 滚动性 367
13.3.3 游标类型 370
13.3.4 并发性选项 383
13.3.5 检测游标类型转换:TYPE WARNING 386
13.3.6 用于SELECT 388
13.3.7 用于UPDATE 388
13.4 用FETCH语句操作游标 388
13.5 在游标中改变数据 389
13.6 小结 392
附录A 用WMI编写管理函数 393
附录B 微软数据转换服务包对象库参考 443