第1章 RDBMS基础:SQL Server数据
库的构成 1
1.1 数据库对象概述 2
1.1.1 数据库对象 2
1.1.2 事务日志 6
1.1.3 最基本的数据库对象:表 7
1.1.4 文件组 8
1.1.5 数据库关系图 8
1.1.6 视图 9
1.1.7 存储过程 9
1.1.8 用户自定义函数 10
1.1.9 序列 10
1.1.10 用户和角色 10
1.1.11 规则 10
1.1.12 默认值 11
1.1.13 用户自定义数据类型 11
1.1.14 全文目录 11
1.2 SQL Server数据类型 11
1.3 SQL Server对象标识符 15
1.3.1 需要命名的对象 16
1.3.2 命名规则 16
1.4 本章小结 17
第2章 SQL Server管理工具 19
2.1 使用联机丛书获得帮助 20
2.2 SQL Server配置管理器 21
2.2.1 服务管理 21
2.2.2 网络配置 21
2.2.3 协议 23
2.2.4 客户端 24
2.3 SQL Server Management Studio 26
2.3.1 启动Management Studio 27
2.3.2 通过“查询”窗口交互 30
2.4 SQL Server Data Tools(以前称为BIDS) 36
2.5 SQL Server集成服务(SSIS) 37
2.6 SQL Server Reporting Services(SSRS) 37
2.7 SQL Server Analysis Services(SSAS) 38
2.8 Bulk Copy Program(bcp) 38
2.9 SQL Server Profiler 38
2.10 sqlcmd 39
2.11 PowerShell 39
2.12 本章小结 39
第3章 T-SQL基本语句 41
3.1 基本SELECT语句 42
3.1.1 SELECT语句与FROM子句 42
3.1.2 WHERE子句 46
3.1.3 ORDER BY子句 48
3.1.4 使用GROUPBY子句聚合数据 51
3.1.5 使用HAVING子句给分组设置条件 59
3.1.6 使用FOR XML子句输出XML 61
3.1.7 通过OPTION子句利用提示 61
3.1.8 DISTINCT和ALL谓词 61
3.2 使用INSERT语句添加数据 64
3.2.1 多行插入 69
3.2.2 INSERT INTO…SELECT语句 69
3.3 用UPDATE语句更改获得的数据 71
3.4 DELETE语句 73
3.5 本章小结 75
第4章 连接 77
4.1 连接 78
4.2 内部连接 79
4.3 使用外部连接检索更多数据 86
4.3.1 简单的外部连接 86
4.3.2 处理更复杂的外部连接 92
4.4 完全连接 97
4.5 交叉连接 98
4.6 JOIN语句的早期语法结构 100
4.6.1 内部连接的早期语法结构 100
4.6.2 外部连接的早期语法结构 101
4.6.3 交叉连接的早期语法结构 102
4.7 联合 103
4.8 本章小结 106
第5章 创建和修改数据表 109
5.1 SQL Server中的对象名 109
5.1.1 模式名(也称为所有权) 110
5.1.2 数据库名 112
5.1.3 通过服务器命名 113
5.1.4 回顾默认值 113
5.2 CREATE语句 113
5.2.1 CREATE DATABASE 114
5.2.2 构建数据库 118
5.2.3 CREATE TABLE 120
5.3 ALTER语句 131
5.3.1 ALTER DATABASE 131
5.3.2 ALTER TABLE 135
5.4 DROP语句 139
5.5 使用GUI工具 139
5.5.1 使用Management Studio创建数据库 140
5.5.2 回到代码:使用Management Studio创建脚本 144
5.6 本章小结 145
第6章 键和约束 147
6.1 约束的类型 148
6.1.1 域约束 148
6.1.2 实体约束 149
6.1.3 参照完整性约束 149
6.2 约束命名 149
6.3 键约束 150
6.3.1 主键约束 150
6.3.2 外键约束 153
6.3.3 唯一约束 164
6.4 CHECK约束 165
6.5 DEFAULT约束 166
6.5.1 在CREATE TABLE语句中定义DEFAULT约束 167
6.5.2 在已存在的表中添加DEFAULT约束 167
6.6 禁用约束 168
6.6.1 在创建约束时忽略无效的数据 168
6.6.2 临时禁用已存在的约束 171
6.7 规则和默认值 172
6.7.1 规则 173
6.7.2 删除规则 174
6.7.3 默认值 174
6.7.4 删除默认值 175
6.7.5 确定哪些表和数据类型使用给定的规则或默认值 175
6.8 用于实现数据完整性的触发器 176
6.9 如何选择 176
6.10 本章小结 177
第7章 更复杂的查询 179
7.1 子查询的概念 180
7.2 关联子查询 184
7.2.1 关联子查询的工作原理 184
7.2.2 处理NULL数据——ISNULL函数 188
7.3 派生表 189
7.4 使用通用表表达式(CTE) 192
7.4.1 使用WITH关键字 192
7.4.2 使用多个CTE 194
7.4.3 递归CTE 195
7.5 使用EXISTS运算符 195
7.5.1 使用EXISTS筛选数据 195
7.5.2 以其他方式使用EXISTS 197
7.6 混合数据类型:CAST和CONVERT 199
7.7 使用MERGE命令同步数据 202
7.7.1 实际使用MERGE命令 202
7.7.2 BY TARGET和BY SOURCE 205
7.8 使用OUTPUT子句收集受影响的行 206
7.9 研究窗口化函数 208
7.9.1 ROW_NUMBER 208
7.9.2 RANK、DENSE_RANK和NTILE 211
7.10 一次一个数据块:特殊的查询分页 212
7.11 性能方面的考虑 213
7.11.1 测量性能 214
7.11.2 JOIN、子查询和CTE的对比 215
7.12 本章小结 216
第8章 规范化和其他基本设计问题 219
8.1 理解表 219
8.2 保持数据“规范” 220
8.2.1 准备工作 221
8.2.2 第一范式 222
8.2.3 第二范式 225
8.2.4 第三范式 226
8.2.5 其他范式 228
8.3 理解关系 229
8.3.1 一对一关系 229
8.3.2 零或一对一关系 230
8.3.3 一对一或一对多关系 230
8.3.4 一对零、一对一或一对多关系 231
8.3.5 多对多关系 232
8.4 数据库关系图 234
8.4.1 表 236
8.4.2 在数据库关系图中创建关系 242
8.5 反规范化 245
8.6 超出规范化的一些规则 245
8.6.1 保持简单 245
8.6.2 选择数据类型 246
8.6.3 尽量进行存储 246
8.7 创建一个快速示例 247
8.7.1 创建数据库 247
8.7.2 添加数据库关系图和初始表 247
8.7.3 添加关系 251
8.7.4 添加一些约束 253
8.8 本章小结 253
第9章 SQL Server存储和索引结构 255
9.1 SQL Server存储机制 255
9.1.1 数据库 255
9.1.2 区段 256
9.1.3 页 256
9.1.4 行 257
9.1.5 稀疏列 257
9.2 理解索引 258
9.2.1 平衡树(B-树) 259
9.2.2 SQL Server中的数据访问方式 261
9.3 创建、修改和删除索引 269
9.3.1 CREATE INDEX语句 269
9.3.2 创建XML索引 274
9.3.3 随约束创建的隐含索引 275
9.3.4 在稀疏列和地理空间列上创建索引 275
9.4 明智地选择——在何时何地使用何种索引 276
9.4.1 选择性 276
9.4.2 注意成本:少即是多 279
9.4.3 选择群集索引 279
9.4.4 列顺序问题 281
9.4.5 覆盖索引 282
9.4.6 过滤索引 282
9.4.7 修改索引 283
9.4.8 删除索引 286
9.4.9 从查询计划中获取提示 286
9.4.10 索引未被使用的原因 286
9.4.11 使用数据库引擎调整向导 287
9.5 维护索引 287
9.5.1 碎片 288
9.5.2 确定碎片和页拆分的可能性 288
9.6 本章小结 292
第10章 视图 295
10.1 创建简单的视图 295
10.2 使用T-SQL编辑视图 307
10.3 删除视图 307
10.4 在Management Studio中创建和编辑视图 307
10.4.1 在Management Studio 中创建视图 308
10.4.2 在Management Studio中编辑视图 310
10.5 审查:显示现有的代码 311
10.6 保护代码:加密视图 312
10.7 关于模式绑定 314
10.8 使用VIEW_METADATA使视图看起来像表一样 314
10.9 索引(物化)视图 314
10.10 索引聚集视图 317
10.11 本章小结 320
第11章 编写脚本和批处理 323
11.1 脚本的基础知识 324
11.1.1 使用USE语句选择数据库环境 324
11.1.2 声明变量 325
11.1.3 设置变量中的值 326
11.1.4 系统函数回顾 328
11.1.5 检索标识值 329
11.1.6 生成序列 333
11.1.7 使用@@ROWCOUNT 336
11.2 将语句分组到批处理中 337
11.2.1 自成一行 338
11.2.2 每个批处理单独发送到服务器 338
11.2.3 GO不是T-SQL命令 339
11.2.4 批处理中的错误 339
11.2.5 何时使用批处理 339
11.3 从命令提示符运行:sqlcmd 343
11.4 动态SQL:用EXEC命令动态生成代码 347
11.4.1 动态生成代码 347
11.4.2 理解动态SQL的危险性 349
11.5 使用控制流语句 353
11.5.1 IF…ELSE语句 353
11.5.2 CASE语句 357
11.5.3 用WHILE语句进行循环 362
11.5.4 WAITFOR语句 364
11.5.5 使用TRY/CATCH块处理错误 364
11.6 本章小结 367
第12章 存储过程 369
12.1 创建存储过程:基本语法 370
12.2 使用ALTER修改存储过程 371
12.3 删除存储过程 372
12.4 参数化存储过程 372
12.4.1 声明参数 372
12.4.2 通过返回值确认成功或失败 378
12.4.3 如何使用RETURN 378
12.5 错误处理 380
12.5.1 处理内联错误 381
12.5.2 利用@@ERROR 382
12.5.3 在存储过程中使用@@ERROR 383
12.5.4 在错误发生前处理错误 386
12.5.5 手动引发错误 392
12.5.6 重新抛出错误 396
12.5.7 添加自定义的错误消息 397
12.6 存储过程的优点 399
12.6.1 创建可调用的进程 399
12.6.2 为了安全性而使用存储过程 399
12.6.3 存储过程和性能 400
12.7 扩展存储过程(XP) 402
12.8 递归简介 402
12.9 调试 404
12.9.1 启动调试器 405
12.9.2 调试器的组成 405
12.9.3 使用断点进行中断 408
12.9.4 使用调试器 410
12.10 理解.NET程序集 413
12.11 使用存储过程的时机 413
12.12 本章小结 414
第13章 用户自定义函数 417
13.1 UDF的定义 417
13.2 返回标量值的UDF 418
13.3 返回表的UDF 424
13.3.1 内联UDF 424
13.3.2 理解确定性 430
13.4 调试用户自定义函数 433
13.5 数据库中的.NET 433
13.6 本章小结 434
第14章 事务和锁 435
14.1 事务 435
14.1.1 ACID事务 436
14.1.2 事务操作简介 436
14.1.3 BEGIN TRAN 437
14.1.4 COMMIT TRAN 437
14.1.5 ROLLBACK TRAN 437
14.1.6 SAVE TRAN 437
14.2 SQL Server日志的工作方式 439
14.2.1 失败和恢复 440
14.2.2 激活隐式事务 442
14.3 锁和并发 442
14.3.1 锁的用途 443
14.3.2 可以锁定的资源 446
14.3.3 锁升级和锁对性能的影响 446
14.3.4 锁定模式 447
14.3.5 锁的兼容性 448
14.3.6 指定一种特有的锁定类型——优化器提示 449
14.4 设置隔离级别 450
14.4.1 READ COMMITTED 451
14.4.2 READ UNCOMM-ITTED 451
14.4.3 REPEATABLE READ 452
14.4.4 SERIALIZABLE 452
14.4.5 SNAPSHOT 452
14.5 处理死锁(1205错误) 453
14.5.1 SQL Server判断死锁的方式 453
14.5.2 选择死锁牺牲者的方式 453
14.5.3 避免死锁 453
14.6 本章小结 456
第15章 触发器 459
15.1 触发器的概念 460
15.1.1 ON子句 461
15.1.2 WITH ENCRYPTION选项 461
15.1.3 FOR AFTER 462
15.1.4 FOR AFTER 子句与INSTEAD OF子句 463
15.1.5 NOT FOR REPLICATION选项 464
15.1.6 AS子句 464
15.2 使用触发器实施数据完整性规则 464
15.2.1 处理来自于其他表的需求 465
15.2.2 使用触发器来检查更新的变化 466
15.2.3 将触发器用于自定义错误消息 468
15.3 触发器的其他常见用途 468
15.4 触发器的其他问题 468
15.4.1 触发器可以嵌套 469
15.4.2 触发器可以递归 469
15.4.3 触发器不能防止体系结构的修改 469
15.4.4 可以在不删除的情况下关闭触发器 470
15.4.5 触发器的激活顺序 470
15.5 INSTEAD OF触发器 472
15.6 性能考虑 472
15.6.1 触发器的被动性 472
15.6.2 触发器与激活的进程之间不存在并发问题 472
15.6.3 使用IF UPDATE()和COLUMNS_UPDATED() 473
15.6.4 保持触发器短小精悍 475
15.6.5 选择索引时不要忘记触发器 475
15.6.6 不要在触发器中进行回滚 475
15.7 删除触发器 476
15.8 调试触发器 476
15.9 本章小结 477
第16章 初识XML 479
16.1 XML基础 480
16.1.1 XML文档的各个组成部分 481
16.1.2 名称空间 489
16.1.3 元素内容 491
16.1.4 有效与格式良好——架构和DTD 492
16.2 SQL Server提供的XML支持 492
16.2.1 将列定义为XML类型 493
16.2.2 XML架构集合 494
16.2.3 创建、修改和删除XML架构集合 496
16.2.4 XML数据类型方法 498
16.2.5 强制执行架构集合之外的约束 504
16.2.6 用XML格式检索关系数据 505
16.2.7 RAW选项 506
16.2.8 AUTO选项 509
16.2.9 EXPLICIT选项 510
16.2.10 PATH选项 512
16.2.11 OPENXML函数 517
16.3 XSLT简介 521
16.4 本章小结 523
第17章 商务智能基础 525
17.1 商务智能的概念 525
17.1.1 BI优于其他方案 526
17.1.2 根据数据做出决策 526
17.1.3 不同的专家有不同的观点 528
17.1.4 通过过去的业绩预测未来的行为 528
17.1.5 谁使用BI 528
17.2 数据仓库 528
17.2.1 数据仓库的目标 529
17.2.2 OLTP与OLAP 529
17.2.3 Kimball与Inmon 530
17.3 维度建模:为什么是规范化的 533
17.3.1 度量值和度量指标 533
17.3.2 事实 534
17.3.3 维度 536
17.4 ETL 542
17.4.1 提供数据 542
17.4.2 强制一致性 543
17.4.3 通过定义权威数据来解决冲突 544
17.4.4 2个、3个或更多个阶段 544
17.4.5 在ETL过程中处理并发 545
17.4.6 缓存提取的内容——操作数据存储(ODS) 546
17.5 使数据可操作:BI报表技术 546
17.5.1 目标 547
17.5.2 关键性能指示器 547
17.5.3 仪表盘 549
17.5.4 记分卡 549
17.5.5 明细表 549
17.5.6 下钻 550
17.5.7 钻取 550
17.5.8 临时报表 551
17.6 本章小结 551
第18章 BI存储和报表资源 553
18.1 T-SQL中的BI 554
18.1.1 AdventureWorks数据仓库 554
18.1.2 使用T-SQL分析函数 555
18.1.3 columnstore索引 563
18.2 SQL Server Analysis Services 564
18.3 建立第一个多维数据集 565
18.3.1 数据源 571
18.3.2 数据源视图 572
18.3.3 多维数据集 572
18.3.4 度量值组 573
18.3.5 维度 574
18.3.6 多维数据集的其他内容 576
18.4 自助式BI:用户工具 576
18.4.1 报表构建器 577
18.4.2 PowerPivot:带有SharePoint和Excel的轻型BI 577
18.4.3 Power View 579
18.5 小结 579
第19章 Reporting Services 581
19.1 Reporting Services 101 581
19.2 理解SSRS报表的生命周期 582
19.2.1 在SSRS中开发报表 582
19.2.2 管理报表 583
19.2.3 把报表发布给用户 583
19.3 理解Reporting Services体系结构 583
19.3.1 SSDT:报表设计器 584
19.3.2 SSRS Windows服务 584
19.3.3 报表管理器 584
19.3.4 报表构建器 584
19.3.5 报表查看器 584
19.4 构建简单的报表模型 585
19.4.1 创建项目 585
19.4.2 给数据模型添加内容 593
19.4.3 构建和部署数据模型 598
19.4.4 创建报表 599
19.5 报表服务器项目 607
19.5.1 建立报表服务器项目 607
19.5.2 部署报表 612
19.6 本章小结 613
第20章 使用Integration Services进行集成 615
20.1 理解问题 615
20.2 使用导入/导出向导生成基本的程序包 616
20.2.1 启动向导 616
20.2.2 选择数据源 617
20.2.3 完成向导 620
20.3 程序包基础知识 622
20.3.1 “连接管理器”面板 623
20.3.2 程序包编辑器面板 625
20.4 执行程序包 632
20.4.1 在Development Studio中执行程序包 633
20.4.2 在SSMS中执行 633
20.4.3 使用执行包实用工具 635
20.4.4 使用SQL Server Agent执行程序包 638
20.4.5 从程序中执行程序包 638
20.5 关于程序包的补充说明 638
20.6 本章小结 638
第21章 扮演管理员的角色 641
21.1 调度作业 642
21.1.1 创建操作员 643
21.1.2 创建作业和步骤 644
21.2 登录和用户 651
21.2.1 安全模式 652
21.2.2 创建登录和用户 652
21.2.3 许可和拥有权 654
21.3 备份和恢复 654
21.3.1 创建备份 655
21.3.2 恢复模式 658
21.3.3 还原 658
21.4 索引维护 660
21.5 数据归档 662
21.6 基于策略的管理 663
21.7 用POWERSHELL自动完成管理任务 663
21.7.1 PowerShell 663
21.7.2 安装和启用PowerShell 664
21.7.3 cmdlet和模块 664
21.7.4 Sqlps 664
21.7.5 部署和执行 666
21.8 本章小结 667
附录A 习题答案 669
· · · · · · (
收起)