第1章 简介 1
1.1 谁是本书的读者 1
1.2 本书的内容 2
1.3 需求 3
1.4 SQL Server 2000的新特性 4
1.4.1 改进了对Web的支持 4
1.4.2 改进了伸缩能力和可靠性 4
1.4.3 改进了开发和管理环境 5
1.5 样本数据库 5
1.5.1 样本数据库安装 5
1.5.2 样本数据库的设计目的和设计思想 7
1.5.3 数据库图解 8
1.6 小结 13
第2章 关系数据库概念和SQL Server环境 14
2.1 数据库 14
2.1.1 关系数据库 15
2.1.2 数据库对象 15
2.1.3 什么是存储过程 20
2.2 SQL Server 2000的工具 20
2.2.1 Service Manager 20
2.2.2 Query Analyzer 21
2.2.3 Enterprise Manager 22
2.2.4 DTS——导入和导出数据 24
2.2.5 osql和isql 25
2.2.6 SQL Server Profiler 26
2.2.7 客户端网络实用工具 26
2.2.8 帮助子系统和SQL Server Books Online 27
2.3 存储过程的基本操作 28
2.3.1 通过Query Analyzer执行存储过程 28
2.3.2 通过Enterprise Manager管理存储过程 31
2.3.3 在Enterprise Manager中编辑存储过程 35
2.3.4 在Query Analyzer中编辑存储过程 35
2.3.5 语法错误 36
2.3.6 Create Stored Procedure Wizard 38
2.4 小结 41
2.5 练习 41
第3章 存储过程设计概念 43
3.1 存储过程的结构 43
3.1.1 组成 43
3.1.2 功能 46
3.1.3 语法 51
3.2 存储过程的类型 52
3.3 编译 53
3.3.1 编译和执行过程 54
3.3.2 执行规划的重用 54
3.3.3 重编译存储过程 57
3.3.4 存储存储过程 58
3.4 管理存储过程 59
3.4.1 列举存储过程 60
3.4.2 查看存储过程 62
3.4.3 重命名存储过程 63
3.4.4 删除存储过程 63
3.4.5 查看相关和有依赖关系的对象 64
3.5 存储过程在数据库应用开发中的作用 66
3.5.1 增强数据完整性 66
3.5.2 复杂商业规则和约束的一致实现 66
3.5.3 模块化设计 66
3.5.4 可维护性 66
3.5.5 减少网络流量 67
3.5.6 更快的执行 67
3.5.7 增强了安全性 67
3.6 小结 67
3.7 练习 68
第4章 Transact-SQL编程基础 69
4.1 TSQL标识符 69
4.2 数据库对象限定词 71
4.3 数据类型 72
4.3.1 数据类型的分组 73
4.3.2 数据类型的同义词 81
4.3.3 用户定义的数据类型 81
4.4 变量 82
4.4.1 局部变量 82
4.4.2 全局变量 85
4.4.3 table(表)变量 88
4.5 流控制语句 88
4.5.1 注释 89
4.5.2 语句块——Begin...End 92
4.5.3 条件执行——If语句 93
4.5.4 循环——While语句 97
4.5.5 无条件执行——GoTo语句 99
4.5.6 调度执行——WaitFor语句 102
4.6 光标 102
4.6.1 Transact-SQL光标 103
4.6.2 与光标有关的语句和函数 106
4.6.3 使用光标带来的问题 107
4.6.4 合理使用光标 108
4.7 小结 110
4.8 练习 110
第5章 函数 112
5.1 使用函数 112
5.1.1 用于选择和赋值中 112
5.1.2 用于过滤规则中 113
5.1.3 用于表达式中 113
5.1.4 作为检查和默认的约束 113
5.1.5 替代表 114
5.2 函数的类型 115
5.2.1 标量函数 115
5.2.2 集合函数 142
5.2.3 行集合函数 144
5.3 小结 145
5.4 练习 145
第6章 复合Transact-SQL 结构——批处理、脚本和事务 147
6.1 批处理 148
6.1.1 使用批处理 149
6.1.2 批处理与出错 149
6.1.3 DDL批处理 152
6.2 脚本 155
6.2.1 数据库脚本编程 155
6.3 事务概念 157
6.3.1 自动提交的事务 158
6.3.2 显式事务 159
6.3.3 隐式事务 160
6.3.4 事务处理的结构 160
6.3.5 嵌套的事务 161
6.3.6 已命名的事务 165
6.3.7 保存点 166
6.3.8 锁定 168
6.3.9 事务隔离级别和提示 169
6.3.10 分布式事务 171
6.3.11 典型的出错 173
6.4 小结 175
6.5 练习 176
第7章 调试和出错处理 177
7.1 调式 177
7.1.1 什么是“bug” 177
7.1.2 调试过程 178
7.1.3 调试工具和技术 180
7.1.4 典型的出错 191
7.2 出错处理 195
7.2.1 使用出错处理 195
7.2.2 为何要自寻烦恼 195
7.2.3 出错处理的策略 196
7.2.4 一种通用的出错处理方法 200
7.2.5 XACT ABORT 204
7.2.6 Raiserror 205
7.3 小结 206
7.4 练习 207
第8章 确定专业的编程风格 209
8.1 源代码控制的概念 209
8.1.1 Microsoft Visual SourceSafe简介 209
8.1.2 管理Visual SourceSafe数据库 210
8.1.3 往Visual SourceSafe中添加一个数据库 211
8.1.4 管理存储过程 214
8.1.5 Visual SourceSafe Explorer 216
8.2 命名约定 219
8.2.1 为何要自寻烦恼 220
8.2.2 命名变量和对象 220
8.2.3 建议的命名约定 223
8.3 小结 226
第9章 特殊类型的过程 227
9.1 存储过程的类型 227
9.1.1 用户定义的存储过程 227
9.1.2 系统存储过程 227
9.1.3 扩展的存储过程 228
9.1.4 临时存储过程 234
9.1.5 全局临时存储过程 234
9.1.6 远程存储过程 235
9.2 用户定义的函数 235
9.2.1 用户定义函数的设计 235
9.2.2 表值用户定义函数 239
9.2.3 行内的表值用户定义函数 242
9.2.4 在Enterprise Manager中管理用户定义的函数 243
9.3 触发器 245
9.3.1 物理设计 245
9.3.2 多记录上的修改操作 251
9.3.3 嵌套触发器和递归触发器 253
9.3.4 触发器的限制 253
9.3.5 SQL Server 2000中的触发器 254
9.3.6 管理触发器 258
9.3.7 设计触发器的建议 261
9.3.8 触发器中的事务管理 262
9.3.9 使用触发器 264
9.4 小结 268
9.5 练习 269
第10章 高级存储过程编程技术 270
10.1 动态地构造查询 270
10.1.1 执行一个串 270
10.1.2 通过窗体查询 271
10.1.3 使用sp_executesql存储过程 274
10.2 使用时间戳的乐观锁 275
10.2.1 时间戳 276
10.2.2 TSEQUAL函数 277
10.2.3 时间戳转换 279
10.3 全文搜索和索引 280
10.4 嵌套的存储过程 282
10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 287
10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 290
10.5 如何处理一个存储过程的结果集 292
10.6 使用标识值 297
10.6.1 一个标准问题及解答 297
10.6.2 标识值与触发器 298
10.6.3 序列号表 299
10.6.4 在一个临时表中保存标识值 301
10.7 GUID 303
10.8 使用MIN或MAX函数的While循环 304
10.9 属性管理 306
10.10 小结 307
10.11 练习 308
第11章 与SQL Server环境的交互 309
11.1 OLE Automation对象的执行 309
11.1.1 sp_OACreate 311
11.1.2 sp_OAMethod 312
11.1.3 sp_OASetProperty 312
11.1.4 sp_OAGetProperty 312
11.1.5 sp_OADestroy 313
11.1.6 sp_OAGetErrorInfo 313
11.1.7 数据类型转换 313
11.2 运行程序 314
11.3 运行Windows脚本文件 315
11.4 与NT Registry的交互 315
11.4.1 Registry子树 315
11.4.2 键和子键 316
11.5 Registry和SQL Server 316
11.5.1 xp_regread 317
11.5.2 xp_regwrite 318
11.5.3 xp_regdeletevalue 318
11.6 作业 319
11.6.1 作业的管理 319
11.6.2 Job Scheduler的可选方法 322
11.6.3 用于维护作业的存储过程 323
11.6.4 操作员和报警 324
11.7 SQL Server和Web 324
11.7.1 Web Assistant 325
11.7.2 Web任务存储过程 328
11.7.3 sp_makewebtask 328
11.7.4 sp_runwebtask 329
11.7.5 sp_dropwebtask 329
11.7.6 Web页模板 329
11.8 串模板 331
11.8.1 xp_sprintf 331
11.8.2 xp_sscanf 332
11.9 邮件 332
11.9.1 用于E-mail工作的扩展存储过程 333
11.9.2 xp_sendmail 333
11.9.3 xp_readmail 334
11.9.4 sp_processmail 335
11.10 数据库部署 335
11.10.1 在以前的环境中 335
11.10.2 在新版本的环境中 336
11.11 安全 337
11.11.1 安全结构 337
11.11.2 实现安全性 339
11.11.3 登录和用户名的同步 344
11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 345
11.11.5 使用一个代理用户来管理应用程序安全 347
11.11.6 使用应用程序角色来管理应用程序安全 347
11.12 小结 347
11.13 练习 348
第12章 SQL Server 2000中的XML支持 349
12.1 XML的变迁 349
12.2 XML简介 350
12.2.1 标记语言简介 350
12.2.2 构造标记语言的块 351
12.2.3 XML 351
12.2.4 XML文档质量 356
12.2.5 XML解析器和DOM 361
12.2.6 XML中的链接和查询 362
12.2.7 转换XML 365
12.3 为何使用XML 366
12.3.1 用于单位之间的信息交换 366
12.3.2 信息发布 367
12.4 SQL Server中的XML支持 368
12.4.1 Transact-SQL语言扩展 368
12.4.2 OPENXML 384
12.4.3 使用XML发布数据库信息 391
12.5 小结 419
12.6 练习 419
附录A SQL Server 2000中的T-SQL和XML数据类型 422
附录B 练习答案 426