第1章 SQL Server 2005概述 1
1.1 SQL Server 2005版本简介 1
1.1.1 版本说明 2
1.1.2 硬件和OS要求 3
1.1.3 2005版本新特性 4
1.2 数据库系统开发模型 10
1.2.1 单层结构(主机系统) 10
1.2.2 2-层结构(客户/服务器结构) 10
1.2.3 3-层结构 11
1.2.4 n-层结构 11
1.3 数据存取模型 12
1.4 安装 13
1.5 SQL Server2005的组件 15
1.5.1 数据库对象 17
1.5.2 SQL Server的数据类型 30
1.5.3 SQL Server的对象标识符 33
1.6 小结 34
第2章 SQL Server 2005实用工具 35
2.1 SQL Server管理工具 35
2.1.1 SQL Server Management Studio 35
2.1.2 复制 36
2.1.3 综合服务 36
2.1.4 MS DTC管理控制台 37
2.1.5 SQL Server Profiler 37
2.1.6 查询分析器 38
2.1.7 OSQL 38
2.1.8 sqlmaint.exe 38
2.2 配置工具(Configuration Tools) 39
2.2.1 Notification Services Command Prompt 39
2.2.2 Reproting Services Configuration 40
2.2.3 SQL Server Configuration Manager 40
2.2.4 SQL Server Error and Usage Reporting 47
2.2.5 SQL Server Surface Area Configuration 49
2.3 性能工具(Performance Tools) 49
2.3.1 数据库引擎优化顾问 50
2.3.2 SQL Server Profiler 51
2.4 文档和指南(Documentation and Tutorials) 52
2.4.1 联机丛书 52
2.4.2 示例 53
2.4.3 指南 53
2.5 SQL Server 2005 Upgrade Advisor 54
2.6 开发工具 54
2.7 小结 54
第3章 SQL Server 2005数据库开发基础 55
3.1 T-SQL基础语句 55
3.1.1 最基本的SELECT语句 55
3.1.2 INSERT语句 65
3.1.3 用UPDATE语句更新取得的数据 66
3.1.4 DELETE语句 67
3.2 联接表 68
3.2.1 联接 68
3.2.2 内部联接 70
3.2.3 外部联接 72
3.2.4 完全联接 76
3.2.5 交叉联接 77
3.2.6 探讨联接的替代语法 77
3.2.7 联合 79
3.3 创建和修改表 81
3.3.1 SQL Server的对象名 81
3.3.2 CREATE语句 83
3.3.3 ALTER语句 86
3.3.4 DROP语句 89
3.4 约束 89
3.4.1 约束类型 90
3.4.2 约束名 91
3.4.3 键约束 91
3.4.4 CHECK约束 97
3.4.5 默认约束 98
3.4.6 禁用约束 100
3.4.7 规则和默认值 101
3.4.8 维护数据完整性的触发器 104
3.4.9 比较 104
3.5 视图 105
3.5.1 简单视图 106
3.5.2 利用T-SQL编辑视图 108
3.5.3 删除视图 108
3.5.4 审核 108
3.5.5 加密视图 109
3.5.6 架构绑定 110
3.5.7 使用VIEW_METADATA 110
3.5.8 索引视图 110
3.6 脚本和批处理 112
3.6.1 编写脚本的基础 112
3.6.2 批处理 117
3.6.3 OSQL 118
3.6.4 动态SQL 119
3.7 存储过程 120
3.7.1 创建存储过程 120
3.7.2 利用ALTER改变存储过程 121
3.7.3 删除存储过程 122
3.7.4 参数化 122
3.7.5 流控制语句 123
3.7.6 存储过程返回值 127
3.7.7 异常处理 128
3.7.8 过程的用途 134
3.7.9 扩展的存储过程(XPs) 136
3.7.10 系统存储过程 137
3.7.11 递归 138
3.8 用户自定义函数 141
3.8.1 返回标量值的UDF 142
3.8.2 返回表的UDF 145
3.8.3 创建“系统”函数 149
3.9 触发器 151
3.9.1 触发器定义 152
3.9.2 使用触发器维护引用完整性规则 155
3.9.3 使用触发器维护数据完整性规则 156
3.9.4 触发器的其他常见用途 156
3.9.5 触发器的其他问题 157
3.9.6 INSTEAD OF触发器 160
3.10 SQL游标 162
3.10.1 游标的定义 162
3.10.2 游标范围 163
3.10.3 游标类型和扩展声明语法 165
3.10.4 用FETCH语句操纵游标 172
3.10.5 在游标中改变数据 173
3.11 数据库快照 173
3.11.1 稀疏文件 173
3.11.2 工作方式 174
3.11.3 创建数据库快照 176
3.11.4 典型用法与限制 177
3.11.5 恢复和删除数据库快照 180
3.12 小结 182
第4章 范式化和其他基本设计问题 185
4.1 表和实体 185
4.2 实现“范式化” 186
4.2.1 准备工作 187
4.2.2 第一范式 188
4.2.3 第二范式 190
4.2.4 第三范式 191
4.2.5 其他范式 192
4.3 关系 193
4.3.1 一对一 193
4.3.2 一对一或一对多 195
4.3.3 多对多 195
4.4 关系图 197
4.5 调整数据库的范式化 204
4.5.1 保持简化 205
4.5.2 选择数据类型 205
4.5.3 有关存储的错误 205
4.5.4 良构数据库 206
4.6 更多的关系图和关系 207
4.6.1 一组关系类型 207
4.6.2 实体盒 207
4.6.3 关系线 208
4.6.4 终止符 208
4.7 数学建模 209
4.7.1 逻辑模型的目标 209
4.7.2 数学建模的组成 210
4.8 处理基于文件的信息 211
4.9 子类 213
4.9.1 子类的类型 215
4.9.2 实现子类 215
4.9.3 子类的物理实现 217
4.9.4 子类与扩展性 217
4.10 数据库重用 218
4.10.1 候选的重用数据库 218
4.10.2 分解 219
4.10.3 重用的代价 219
4.11 通过分区实现扩展性 220
4.12 小结 221
第5章 SQL Server 2005的开发模式 222
5.1 开发人员信息中心 222
5.1.1 应用程序设计概念 223
5.1.2 数据库设计概念 234
5.1.3 语言 242
5.1.4 数据访问编程 242
5.1.5 管理编程 242
5.1.6 工具 245
5.2 管理员信息中心 246
5.2.1 概念 246
5.2.2 使用数据库引擎 252
5.3 结构设计师信息中心 255
5.4 工作者信息中心 256
5.5 设计与部署 256
5.5.1 开发数据库计划 256
5.5.2 联机事务处理和决策支持 258
5.5.3 规范化 259
5.5.4 数据完整性 260
5.5.5 查看扩展属性 261
5.6 小结 263
第6章 SQL Server 2005下的XML开发基础 264
6.1 XML基础 265
6.1.1 XML文档的组成 266
6.1.2 良构XML 271
6.1.3 确定元素和属性 272
6.2 命名空间 272
6.3 DTD和架构 274
6.3.1 DTD 274
6.3.2 XML架构集合 275
6.3.3 DTD/架构和性能总结 279
6.4 转换——XSLT 280
6.5 FOR XML子句 282
6.5.1 RAW 283
6.5.2 AUTO 288
6.5.3 EXPLICIT 289
6.5.4 OPENXML 307
6.5.5 XML语法规则 316
6.5.6 元素的语法 318
6.5.7 注释的语法 318
6.5.8 CDATA的语法 318
6.5.9 namespaces的语法 319
6.5.10 entity的语法 319
6.6 小结 320
第7章 复制 322
7.1 bcp 322
7.1.1 bcp语法 323
7.1.2 bcp导出 326
7.1.3 格式化文件 326
7.1.4 bcp导入 329
7.1.5 BULK INSERT 332
7.1.6 OPENROWSET 333
7.1.7 XML大容量加载 335
7.1.8 优化大容量导入的方法 340
7.2 支持分布式数据 341
7.3 架构复制时的考虑 341
7.3.1 独立性 342
7.3.2 延迟性 342
7.3.3 数据一致性 342
7.3.4 架构一致性 342
7.3.5 其他考虑 343
7.4 发布比喻 343
7.4.1 订阅刊物 345
7.4.2 订阅服务器类型 346
7.4.3 过滤数据 346
7.5 复制类型 346
7.5.1 快照复制 347
7.5.2 合并复制 349
7.5.3 事务复制 353
7.5.4 立即更新的订阅服务器 355
7.5.5 混合复制类型 356
7.6 复制模型假设 356
7.6.1 标准模型 357
7.6.2 混合模型 358
7.6.3 附加说明 359
7.7 实现示例 359
7.7.1 承包人供应公司 359
7.7.2 清除服务 360
7.8 计划复制 361
7.8.1 数据考虑 361
7.8.2 复制类型 362
7.8.3 复制向导 362
7.9 启用发布和分发 362
7.9.1 启动向导 363
7.9.2 默认配置 364
7.9.3 禁用发布 365
7.9.4 T-SQL过程 366
7.10 事务/快照发布刊物 366
7.10.1 创建和管理发布向导 366
7.10.2 配置之后 368
7.10.3 T-SQL过程 371
7.11 合并发布刊物 371
7.12 异类数据库复制 371
7.12.1 从Oracle发布数据 372
7.12.2 将数据发布到非SQL Server订阅服务器上 379
7.13 管理复制 380
7.13.1 复制脚本 380
7.13.2 支持各种复制 380
7.13.3 发布到Internet上 381
7.13.4 复制和架构变化 381
7.13.5 复制监视器 383
7.13.6 后续 384
7.14 企业范围的自动化管理 384
7.14.1 创建多服务器环境 385
7.14.2 管理作业 385
7.14.3 轮询服务器 386
7.14.4 管理事件 387
7.15 高可用性解决方案 388
7.16 小结 390
第8章 SQL Server 2005的高级查询 391
8.1 在SQL Server 2005中使用XML 391
8.1.1 xml数据类型表示形式 391
8.1.2 xml数据类型 392
8.1.3 xml数据类型列的索引 394
8.1.4 管理服务器上的XML架构集 395
8.1.5 使用FOR XML和OPENXML发布和处理XML数据 395
8.1.6 客户端XML功能 397
8.2 使用本机XML Web服务 399
8.2.1 本机XML Web服务的工作原理 399
8.2.2 启用本机XML Web服务 400
8.2.3 本机XML Web服务的安全性方法 401
8.2.4 设置服务器以侦听本机XML Web服务请求 401
8.2.5 使用WSDL 401
8.2.6 SOAP技术 401
8.3 公共语言运行时 412
8.3.1 开始使用CLR 413
8.3.2 .NET框架中的应用 415
8.4 高级查询 418
8.4.1 建立嵌套子查询 419
8.4.2 关联子查询 423
8.4.3 衍生表 427
8.4.4 EXISTS操作符 429
8.4.5 混合数据类型:CAST和CONVERT 432
8.4.6 性能考虑 435
8.5 小结 436
第9章 综合服务 437
9.1 体系结构 437
9.2 综合服务工具和实用工具 439
9.2.1 综合服务与Studio环境 439
9.2.2 SSIS设计器及概念 440
9.2.3 SSIS向导 453
9.2.4 执行包实用工具 456
9.3 SSIS设计 456
9.3.1 生成解决方案 456
9.3.2 设计和创建SSIS包 458
9.3.3 部署包 467
9.4 典型用途 472
9.5 小结 474
第10章 全文检索 475
10.1 SQL Server的存储方式 476
10.1.1 各种版本的存储共性 477
10.1.2 SQL Server 7.0以前版本的存储方式 480
10.1.3 SQL Server 7.0及以后版本的存储方式 481
10.2 索引定义 485
10.2.1 B-树 486
10.2.2 访问数据的原理 488
10.2.3 索引类型和索引遍历 489
10.3 创建和删除索引 502
10.3.1 CREATE INDEX语句 502
10.3.2 创建约束时暗含的索引 505
10.3.3 XML索引 506
10.4 选择创建索引的时机 512
10.4.1 可选择性 512
10.4.2 成本 513
10.4.3 选择聚集索引 513
10.4.4 列顺序问题 515
10.4.5 删除索引 515
10.5 维护索引 516
10.5.1 碎片 516
10.5.2 定义碎片与页拆分的可能性 516
10.6 全文检索体系结构 520
10.7 设置全文索引和分类 521
10.7.1 授予数据库全文搜索能力 522
10.7.2 创建全文目录 522
10.7.3 给独立的表启用全文检索功能 523
10.7.4 索引组装 526
10.8 全文查询语法 528
10.8.1 CONTAINS 528
10.8.2 FREETEXT 529
10.8.3 CONTAINSTABLE 529
10.8.4 FREETEXTTABLE 531
10.8.5 处理短语 531
10.8.6 近似(Proximity) 533
10.8.7 前缀条件 533
10.8.8 权重 534
10.8.9 词尾变化 535
10.8.10 对等级的简单总结 535
10.9 噪声单词 535
10.10 语言 536
10.11 sp_fulltext_service 537
10.12 小结 537
第11章 事务、锁和分布式查询 539
11.1 事务 540
11.1.1 BEGIN TRAN 541
11.1.2 COMMIT TRAN 541
11.1.3 ROLLBACK TRAN 541
11.1.4 SAVE TRAN 541
11.2 事务日志 542
11.2.1 失败和恢复 544
11.2.2 日志传送 545
11.2.3 隐式事务 546
11.2.4 检查点 547
11.2.5 截断 549
11.2.6 收缩事务日志 550
11.2.7 使用事务日志备份 552
11.2.8 事务日志物理体系结构 554
11.3 锁和并发性 555
11.3.1 锁可以阻止的问题 556
11.3.2 可以加锁的资源 560
11.3.3 锁增加和锁对性能的影响 560
11.3.4 锁模式 563
11.3.5 锁的兼容性 565
11.3.6 说明特定锁的类型 566
11.4 设置隔离层 569
11.5 快照隔离 572
11.5.1 隔离级别 572
11.5.2 行版本控制 573
11.5.3 快照隔离事务示例 577
11.5.4 通过行版本控制的已提交读示例 578
11.6 处理死锁 580
11.6.1 指出存在死锁 580
11.6.2 选择死锁牺牲品 581
11.6.3 避免死锁 581
11.7 故障转移群集 583
11.8 分布式事务 584
11.8.1 准备阶段 584
11.8.2 提交阶段 585
11.9 分布式查询 585
11.9.1 创建链接服务器 586
11.9.2 使用链接服务器 588
11.9.3 从远程服务器上收集元数据 593
11.9.4 创建和使用通道查询 595
11.9.5 在远程数据源上使用特别查询 597
11.9.6 其他分布式查询的注意事项 598
11.10 分布式分区视图 600
11.11 小结 607
第12章 SQL Server 2005服务 609
12.1 服务分割器 609
12.1.1 Service Broker概念 610
12.1.2 Service Broker体系结构 612
12.2 分析服务 618
12.2.1 终端用户的要求 618
12.2.2 维度数据库 622
12.2.3 OLAP存储类型 627
12.2.4 数据仓库 628
12.2.5 数据转换 630
12.2.6 元数据 631
12.2.7 数据挖掘模型 634
12.2.8 数据挖掘算法 634
12.2.9 分析服务体系结构 637
12.2.10 商业智能增强功能 642
12.3 报表服务 643
12.3.1 创建和管理报表 645
12.3.2 功能与概念 646
12.3.3 报表服务体系结构 649
12.4 通知服务 650
12.4.1 通知服务定义 650
12.4.2 关键术语 651
12.4.3 通知服务体系结构 652
12.5 小结 654
第13章 性能调试与优化 655
13.1 索引选择 656
13.2 数据库引擎优化顾问 657
13.2.1 工作负荷 658
13.2.2 注意事项 659
13.3 数据处理 660
13.4 策略要求 661
13.5 程序维护 662
13.6 优化存储过程 662
13.6.1 尽可能缩短事务 662
13.6.2 尽可能使用限制最少的事务隔离层 662
13.6.3 必要时可以执行多种解决方案 662
13.6.4 尽量避免使用游标 663
13.7 使用临时表 663
13.8 硬件考虑 663
13.8.1 服务器的独占使用 664
13.8.2 I/O与CPU速度 664
13.8.3 OLTP与OLAP 667
13.8.4 在线或离线 667
13.8.5 宕机 667
13.8.6 丢失数据 668
13.8.7 性价比 668
13.8.8 服务器 668
13.8.9 理想系统 668
13.9 解决方法 669
13.9.1 各种显示计划和统计信息 669
13.9.2 数据库一致性检验程序 673
13.9.3 查询控制器(Query Governor) 675
13.9.4 SQL Server Profiler(事件探查器) 676
13.9.5 性能监视器(Perfmon) 679
13.10 小结 681
第14章 SQL Server 2005管理 682
14.1 安全性基础 683
14.1.1 固定登录ID和口令 683
14.1.2 口令有效期 684
14.1.3 长度与组成 685
14.1.4 登录次数 686
14.1.5 存储用户和口令 687
14.2 安全性选项 687
14.2.1 SQL Server安全性 688
14.2.2 操作系统集成安全性 691
14.3 用户权限 693
14.3.1 对特定数据库授予访问权 693
14.3.2 在数据库中授予对象许可权 694
14.3.3 用户权限和语句级的许可权 697
14.4 服务器和数据库角色 698
14.4.1 服务器角色 698
14.4.2 数据库角色 699
14.5 应用程序角色 702
14.5.1 创建应用程序角色 703
14.5.2 给应用程序角色添加许可权 703
14.5.3 使用应用程序角色 703
14.5.4 删除应用程序角色 704
14.6 XML的安全性 704
14.7 更高级的安全性 705
14.7.1 处理Guest账户 705
14.7.2 TCP/IP端口设置 706
14.7.3 禁用sa账户 706
14.7.4 xp_cmdshell 706
14.7.5 其他工具 706
14.8 调度表作业 707
14.8.1 创建操作员 708
14.8.2 创建作业和任务 710
14.9 备份和还原 720
14.9.1 重要性及目标 721
14.9.2 备份介质 722
14.9.3 备份 724
14.9.4 恢复数据 726
14.9.5 恢复模式 728
14.9.6 恢复优化 730
14.9.7 SQL Server代理 733
14.10 自动响应警报 734
14.10.1 在数据库引擎中创建自动响应警报 735
14.10.2 在T-SQL中创建自动响应警报 735
14.11 全文目录操纵 737
14.11.1 备份与恢复 737
14.11.2 安排注入的调度 737
14.12 异地复制 737
14.12.1 复制数据库向导 737
14.12.2 备份和恢复 738
14.12.3 连接/分离 738
14.13 索引重建 738
14.14 归档数据 739
14.15 小结 740
第15章 案例精解 741
15.1 AdventureWorks设计基础 741
15.2 AdventureWorks总体设计 742
15.2.1 所有者 744
15.2.2 相关表 746
15.3 AdventureWorks示例 749
15.3.1 查询示例 749
15.3.2 分区表和分区索引示例 757
15.3.3 CLR触发器 760
15.4 数据挖掘算法 772
15.4.1 决策树算法 772
15.4.2 时序算法 774
15.4.3 聚类分析算法 777
15.4.4 关联算法 778
15.4.5 顺序分析和聚类分析算法 780
15.5 Xquery语言 781
15.6 HTTP访问 782
15.6.1 设置HTTP访问 783
15.6.2 基于URL的查询 785
15.6.3 使用模板 786
15.6.4 POST 789
15.6.5 XPath 791
15.6.6 设计结果的样式 795
15.7 使用IcommandStream设置XML命令 798
15.8 小结 821
附录A 函数类别 822
附录B 用WMI编写管理函数 823
B.1 SQL Server脚本管理的历史和未来 823
B.2 WMI工具与结构 824
B.3 WMI对象基本知识 826
B.3.1 类 827
B.3.2 实例 828
B.3.3 关联 829
B.3.4 命名空间 829
B.4 安装WMI SQL Server管理提供商 830
B.5 连接到WMI 834
B.6 实例检索操作 836
B.6.1 枚举所有实例 837
B.6.2 得到特定实例 838
B.6.3 实例查询 841
B.6.4 关联查询 842
B.6.5 从实例调用程序中得到最好性能的技巧 846
B.7 修改实例 849
B.8 创建实例 851
B.9 删除实例 852
B.10 调用方法 853
B.10.1 动态方法 853
B.10.2 静态方法 856
B.11 使用事件 858
B.11.1 实例事件 858
B.11.2 非实例事件 863
B.12 静态设置类 864
B.13 访问限定词 866
B.13.1 使用SQL Server特定的限定词 869
B.13.2 SQLVersion 869
B.13.3 WriteAtCreate和WriteAtUpdate 870
B.14 小结 870
附录C SQLCMD 871