第1章 RDBMS基础:SQL Server数据库的构成 1
1.1数据库对象概述 1
1.1.1数据库对象 2
1.1.2事务日志 6
1.1.3最基本的数据库对象:表 6
1.1.4文件组 8
1.1.5数据库关系图 8
1.1.6视图 9
1.1.7存储过程 10
1.1.8用户自定义函数 10
1.1.9用户和角色 10
1.1.10规则 10
1.1.11默认值 11
1.1.12用户自定义数据类型 11
1.1.13全文目录 11
1.2SQL Server数据类型 11
1.3SQL Server对象标识符 16
1.3.1需要命名的对象 16
1.3.2命名规则 17
1.4本章小结 17
第2章 SQL Server管理工具 18
2.1联机丛书 18
2.2SQL Server配置管理器 19
2.2.1服务管理 20
2.2.2网络配置 20
2.2.3协议 21
2.2.4客户端 23
2.3SQL Server Management Studio 25
2.3.1启动Management Studio 25
2.3.2“查询”窗口 28
2.4SQL Server集成服务(SSIS) 32
2.5Bulk Copy Program(bcp) 33
2.6SQL Server Profiler 33
2.7sqlcmd 34
2.8PowerShell 34
2.9本章小结 34
第3章 T-SQL基本语句 35
3.1基本SELECT语句 36
3.1.1SELECT语句与FROM子句 36
3.1.2WHERE子句 39
3.1.3ORDER BY子句 42
3.1.4使用GROUP BY子句聚合数据 44
3.1.5使用HAVING子句给分组设置条件 52
3.1.6使用FOR XML子句输出XML 53
3.1.7通过OPTION子句利用提示 54
3.1.8DISTINCT和ALL谓词 54
3.2使用INSERT语句添加数据 56
3.2.1多行插入 60
3.2.2INSERT INTO…SELECT语句 61
3.3用UPDATE语句更改数据 63
3.4DELETE语句 65
3.5本章小结 66
3.6练习 66
第4章 连接 67
4.1连接 67
4.2内部连接 69
4.3外部连接 75
4.3.1简单的外部连接 76
4.3.2处理更复杂的外部连接 81
4.4完全连接 85
4.5交叉连接 86
4.6JOIN语句的早期语法结构 87
4.6.1内部连接的早期语法结构 88
4.6.2外部连接的早期语法结构 88
4.6.3交叉连接的早期语法结构 89
4.7联合 90
4.8本章小结 94
4.9练习 94
第5章 创建和修改数据表 95
5.1SQL Server中的对象名 95
5.1.1模式名 95
5.1.2数据库名 98
5.1.3通过服务器命名 98
5.1.4回顾默认值 98
5.2CREATE语句 99
5.2.1CREATE DATABASE 99
5.2.2CREATETABLE 104
5.3ALTER语句 115
5.3.1ALTER DATABASE 115
5.3.2ALTER TABLE 119
5.4DROP语句 122
5.5使用GUI工具 123
5.5.1使用Management Studio创建数据库 123
5.5.2回到代码:使用Managementstudio创建脚本的基础知识 127
5.6本章小结 128
5.7练习 128
第6章 约束 129
6.1约束的类型 130
6.1.1域约束 130
6.1.2实体约束 130
6.1.3参照完整性约束 131
6.2约束命名 131
6.3键约束 132
6.3.1主键约束 132
6.3.2外键约束 134
6.3.3唯一约束 144
6.4CHECK约束 145
6.5DEFAULT约束 146
6.5.1在CREATE TABLE语句中定义DEFAULT约束 147
6.5.2在已存在的表中添加DEFAULT约束 148
6.6禁用约束 148
6.6.1在创建约束时忽略无效的数据 148
6.6.2临时禁用已存在的约束 150
6.7规则和默认值 152
6.7.1规则 152
6.7.2默认值 154
6.7.3确定哪个表和数据类型使用给定的规则或默认值 154
6.8用于实现数据完整性的触发器 155
6.9如何选择 155
6.10本章小结 156
第7章 更复杂的查询 157
7.1子查询的概念 158
7.2关联子查询 161
7.2.1关联子查询的工作原理 162
7.2.2在WHERE子句中的关联子查询 162
7.2.3处理NULL数据——ISNULL函数 165
7.3派生表 166
7.4EXISTS运算符 168
7.5混合数据类型:CAST和CONVERT 171
7.6MERGE命令 174
7.6.1BY TARGET和BY SOURCE 177
7.6.2OUTPUT子句 177
7.7性能方面的考虑 180
7.8本章小结 181
7.9练习 181
第8章 规范化和其他基本设计问题 182
8.1表 182
8.2保持数据“规范” 183
8.2.1准备工作 184
8.2.2第一范式 185
8.2.3第二范式 188
8.2.4第三范式 189
8.2.5其他范式 191
8.3关系 192
8.3.1一对一关系 192
8.3.2一对一或一对多关系 193
8.3.3多对多关系 195
8.4数据库关系图 198
8.4.1表 200
8.4.2添加和删除表 200
8.4.3关系 205
8.5反规范化 207
8.6超出规范化的一些规则 208
8.6.1保持简单 208
8.6.2选择数据类型 208
8.6.3尽量进行存储 209
8.7创建一个快速示例 209
8.7.1创建数据库 209
8.7.2添加数据库关系图和初始表 210
8.7.3添加关系 213
8.7.4添加一些约束 215
8.8本章小结 216
8.9练习 216
第9章 SQL Server存储和索引结构 217
9.1SQL Server存储机制 217
9.1.1数据库 217
9.1.2区段 218
9.1.3页 218
9.1.4行 219
9.1.5稀疏列 219
9.2理解索引 219
9.2.1平衡树(B-树) 220
9.2.2SQL Server中访问数据的方式 223
9.3创建、修改和删除索引 230
9.3.1CREATE INDEX语句 230
9.3.2创建XML索引 234
9.3.3随约束创建的隐含索引 235
9.3.4在稀疏列和地理空间列上创建索引 236
9.4明智地选择——在何时何地使用何种索引 236
9.4.1选择性 236
9.4.2注意成本 236
9.4.3选择群集索引 237
9.4.4列顺序问题 239
9.4.5修改索引 239
9.4.6删除索引 241
9.4.7从查询计划中获取提示 242
9.4.8使用数据库引擎调整向导 242
9.5维护索引 242
9.5.1碎片 242
9.5.2确定碎片和页拆分的可能性 243
9.6本章小结 246
9.7练习 247
第10章 视图 248
10.1简单的视图 248
10.2更加复杂的视图 253
10.3使用T-SQL编辑视图 259
10.4删除视图 260
10.5在Management Studio中创建和编辑视图 260
10.6审查:显示现有的代码 263
10.7保护代码:加密视图 264
10.8关于模式绑定 265
10.9使用VIEW METADATA使视图看起来像表一样 266
10.10索引(物化)视图 266
10.11本章小结 268
10.12练习 269
第11章 编写脚本和批处理 270
11.1脚本的基础知识 270
11.1.1USE语句 271
11.1.2声明变量 271
11.1.3使用@@IDENTITY 275
11.1.4使用@@ROWCOUNT 278
11.2批处理 279
11.2.1批处理中的错误 281
11.2.2何时使用批处理 281
11.3sqlcmd 284
11.4动态SQL:用EXEC命令动态生成代码 288
11.5控制流语句 293
11.5.1IF…ELSE语句 293
11.5.2CASE语句 297
11.5.3用WHILE语句进行循环 302
11.5.4WAITOR语句 303
11.5.5TRY/CATCH块 303
11.6本章小结 306
11.7练习 306
第12章 存储过程 307
12.1创建存储过程:基本语法 307
12.2使用ALTER修改存储过程 309
12.3删除存储过程 309
12.4参数化 310
12.5通过返回值确认成功或失败 315
12.6错误处理 317
12.6.1以前的方式 318
12.6.2在错误发生前处理错误 323
12.6.3手动引发错误 328
12.6.4添加自定义的错误消息 331
12.7存储过程的优点 333
12.7.1创建可调用的进程 333
12.7.2为了安全性使用存储过程 333
12.7.3存储过程和性能 334
12.8扩展存储过程(XP) 336
12.9递归简介 336
12.10调试 338
12.10.1启动调试器 339
12.10.2调试器的组成 339
12.10.3使用调试器 342
12.11.NET程序集 343
12.12本章小结 344
第13章 用户自定义函数 345
13.1UDF的定义 345
13.2返回标量值的UDF 346
13.3返回表的UDF 350
13.4调试用户自定义函数 358
13.5数据库中的.NET 358
13.6本章小结 358
13.7练习 358
第14章 事务和锁 359
14.1事务 359
14.1.1BEGIN TRAN 360
14.1.2COMMIT TRAN 360
14.1.3ROLLBACK TRAN 361
14.1.4SAVE TRAN 361
14.2SQL Server日志的工作方式 361
14.2.1失败和恢复 362
14.2.2隐式事务 364
14.3锁和并发 364
14.3.1通过锁可以防止的问题 365
14.3.2可以锁定的资源 368
14.3.3锁升级和锁对性能的影响 368
14.3.4锁定模式 369
14.3.5锁的兼容性 370
14.3.6指定一种特有的锁定类型——优化器提示 371
14.4设置隔离级别 372
14.5处理死锁(1205错误) 375
14.5.1SQL Server判断死锁的方式 375
14.5.2选择死锁牺牲者的方式 375
14.5.3避免死锁 375
14.6本章小结 377
第15章 触发器 379
15.1触发器的概念 380
15.1.1ON子句 381
15.1.2WITH ENCRYPTION选项 381
15.1.3FOR|AFTER子句与INSTEAD OF子句 381
15.1.4WITH APPEND选项 384
15.1.5NOT FOR REPLICATION选项 384
15.1.6AS子句 384
15.2使用触发器实施数据完整性规则 384
15.2.1处理来自于其他表的需求 385
15.2.2使用触发器来检查更新的变化 386
15.2.3将触发器用于自定义错误消息 388
15.3触发器的其他常见用途 388
15.4触发器的其他问题 388
15.4.1触发器可以嵌套 389
15.4.2触发器可以递归 389
15.4.3触发器不能防止体系结构的修改 389
15.4.4可以在不删除的情况下关闭触发器 390
15.4.5触发器的激活顺序 390
15.5INSTEAD OF触发器 392
15.6性能考虑 392
15.6.1触发器的被动性 392
15.6.2触发器与激活的进程之间不存在并发问题 392
15.6.3使用IF UPDATE()和COLUMNS_UPDATED() 393
15.6.4保持触发器短小精悍 395
15.6.5选择索引时不要忘记触发器 395
15.6.6不要在触发器中进行回滚 395
15.7删除触发器 395
15.8调试触发器 396
15.9本章小结 397
第16章 初识XML 398
16.1XML基础 399
16.1.1XML文档的各个组成部分 400
16.1.2名称空间 407
16.1.3元素内容 408
16.1.4有效与格式良好——架构和DTD 409
16.2SQL Server提供的XML支持 410
16.2.1将列定义为 XML类型 410
16.2.2XML架构集合 411
16.2.3创建、修改和删除XML架构集合 413
16.2.4XML数据类型方法 415
16.2.5强制执行架构集合之外的约束 421
16.2.6用XML格式检索关系数据 421
16.2.7RAW选项 422
16.2.8AUTO选项 424
16.2.9EXPLICIT选项 426
16.2.10PATH选项 427
16.2.11OPENXML函数 432
16.3XSLT简介 436
16.4本章小结 438
第17章 Reporting Services概述 439
17.1Reporting Services 101 439
17.2创建简单的报表模型 440
17.2.1数据源视图 443
17.2.2建立数据模型 447
17.2.3创建报表 450
17.3报表服务器项目 454
17.4本章小结 459
第18章 使用Integration Services进行集成 460
18.1理解问题 460
18.2使用导入/导出向导生成基本的程序包 461
18.3程序包基础知识 466
18.3.1“连接管理器”面板 467
18.3.2程序包编辑器面板 468
18.4执行程序包 472
18.4.1在Development Studio中运行程序包 472
18.4.2使用执行包实用工具 472
18.4.3使用SQL Server Agent执行程序包 475
18.4.4从程序中执行程序包 475
18.5关于程序包的补充说明 475
18.6本章小结 475
第19章 扮演管理员的角色 476
19.1调度作业 477
19.1.1创建操作员 477
19.1.2创建作业和任务 479
19.2备份和恢复 487
19.2.1创建备份——转储 488
19.2.2恢复模式 491
19.2.3还原 491
19.3索引维护 493
19.4数据归档 495
19.5基于策略的管理 496
19.6本章小结 496
19.7练习 497
附录A系统函数 498
附录B非常简单的连接示例 550
附录C学习资源 558