SQL Server 2008编程入门经典第3版

2012年清华大学出版社出版的图书
《SQL Server 2008编程入门经典第3版》是2012年1月1日清华大学出版社出版的图书，作者是孙皓。
内容简介
本书由浅入深逐步介绍了SQLServer数据库的高级主题，重点讨论了SQLServer2008的特殊功能以及与其他编程环境的不同之处。作者RobertVieria是MicrosoftSQLServer方面的权威，他采用通俗易懂的方法揭示了SQLServer2008核心组件的重要更改。
本书首先概述了数据库设计的概念，介绍了如何用SQLServer2008实现这些基本概念。然后，讲述了RDBMS(关系数据库管理系统)的功能和它在开发系统架构方面的优势。SQLServer2008的新增内容和更改包括：DATE和TIME数据类型、hierarchyID数据类型、MERGE命令和多行插入，以及递归查询等。本书旨在帮助您快速地掌握MicrosoftSQLServer2008的编程技术。
目录
第1章RDBMS基础：
SQLServer数据库的构成 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.2SQLServer数据类型 11
1.3SQLServer对象标识符 16
1.3.1需要命名的对象 16
1.3.2命名规则 17
1.4本章小结 17
第2章SQLServer管理工具 18
2.1联机丛书 18
2.2SQLServer配置管理器 19
2.2.1服务管理 20
2.2.2网络配置 20
2.2.3协议 21
2.2.4客户端 23
2.3SQLServerManagement
Studio 25
2.3.1启动ManagementStudio 25
2.3.2“查询”窗口 28
2.4SQLServer集成服务(SSIS) 32
2.5BulkCopyProgram(bcp) 33
2.6SQLServerProfiler 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.3ORDERBY子句 42
3.1.4使用GROUPBY
子句聚合数据 44
3.1.5使用HAVING子句
给分组设置条件 52
3.1.6使用FORXML
子句输出XML 53
3.1.7通过OPTION子句
利用提示 54
3.1.8DISTINCT和ALL谓词 54
3.2使用INSERT语句添加数据 56
3.2.1多行插入 60
3.2.2INSERTINTO…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.1SQLServer中的对象名 95
5.1.1模式名 95
5.1.2数据库名 98
5.1.3通过服务器命名 98
5.1.4回顾默认值 98
5.5使用GUI工具 123
5.5.1使用ManagementStudio
创建数据库 123
5.5.2回到代码：使用Management
Studio创建脚本的基础知识 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.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混合数据类型：
7.7性能方面的考虑 180
7.8本章小结 181
7.9练习 181
第8章规范化和其他基本设计问题 182
8.1表 182
8.2保持数据“规范” 193
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章SQLServer存储
和索引结构 217
9.1SQLServer存储机制 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.2SQLServer中访问
数据的方式 223
9.3创建、修改和删除索引 230
9.3.1CREATEINDEX语句 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在ManagementStudio中
创建和编辑视图 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.1BEGINTRAN 360
14.1.2COMMITTRAN 360
14.1.3ROLLBACKTRAN 361
14.1.4SAVETRAN 361
14.2SQLServer日志的工作方式 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.1SQLServer判断
死锁的方式 375
14.5.2选择死锁牺牲者
的方式 375
14.5.3避免死锁 375
14.6本章小结 377
第15章触发器 379
15.1触发器的概念 380
15.1.1ON子句 381
15.1.2WITHENCRYPTION
选项 381
15.1.3FOR|AFTER子句与
INSTEADOF子句 381
15.1.4WITHAPPEND选项 384
15.1.5NOTFORREPLICATION
选项 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.5INSTEADOF触发器 392
15.6性能考虑 392
15.6.1触发器的被动性 392
15.6.2触发器与激活的进程
之间不存在并发问题 392
15.6.3使用IFUPDATE()和
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.2SQLServer提供的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章ReportingServices概述 439
17.1ReportingServices101 439
17.2创建简单的报表模型 440
17.2.1数据源视图 443
17.2.2建立数据模型 447
17.2.3创建报表 450
17.3报表服务器项目 454
17.4本章小结 459
第18章使用IntegrationServices进行集成 460
18.1理解问题 460
18.2使用导入/导出向导生成基本的程序包 461
18.3程序包基础知识 466
18.3.1“连接管理器”面板 467
18.3.2程序包编辑器面板 468
18.4执行程序包 472
18.4.1在DevelopmentStudio中运行程序包 472
18.4.2使用执行包实用工具 472
18.4.3使用SQLServerAgent执行程序包 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