第1章 引言 1
1.1 .NET Framework和Microsoft平台 1
1.2 .NET Framework对SQL Server的影响 2
1.3 SQL:1999标准:扩展关系模型 5
1.4 用户定义的类型与SQL Server 7
1.5 XML:数据和文档存储 9
1.6 Web服务:XML作为一种封送格式 14
1.7 客户访问以及客户 15
1.7.1 客户端数据库API和SQL Server 2005 15
1.7.2 客户端基于XML的API与SQL Server 2005的集成 15
1.8 扩展SQL Server到平台:Service Broker和Notification Service 16
小结 17
第2章 宿主运行时:SQL Server作为一个运行时宿主 18
2.1 为什么要关心宿主的工作原理 18
2.2 什么是.NET Framework运行时宿主 19
2.3 SQL Server作为一个运行时宿主 20
2.3.1 SQL Server的资源管理 21
2.3.2 异常情况处理 22
2.3.3 加载代码 24
2.3.4 安全性 25
2.4 加载运行时:进程和AppDomain 26
2.5 安全代码:运行时如何安全运行“外部”代码 28
2.6 代码存在何处:存储.NET Framework程序集(CREATE ASSEMBLY) 29
2.7 程序集依赖:当自己的程序集使用其他程序集时 33
2.8 程序集和SQL架构:谁拥有程序集(信息架构) 33
2.8.1 系统元数据表和INFORMATION_SCHEMA 33
2.8.2 程序集元数据 34
2.9 维护用户程序集(ALTER ASSEMBLY,DROP ASSEMBLY) 36
2.10 遵循规范 38
2.11 结论 39
小结 39
3.1 扩展SQL Server 40
第3章 .NET CLR语言中的过程和函数 40
3.2 CLR扩展基础 41
3.3 CLR扩展详解 49
3.4 System.Data.SqlTypes 50
3.4.1 关于空值的一些说明 51
3.4.2 使用SqlTypes 52
3.5 参数和返回值 62
3.6 用户定义的函数 62
3.7 表值函数 66
3.8 存储过程 71
3.9 触发器 72
小结 73
第4章 进程内数据访问 74
4.1 用SqlClient编程 74
4.2 上下文:SqlContext类 76
4.3 连接 79
4.4 命令:使事情发生 80
4.5 获得结果 83
4.6 事务 85
4.6.1 TransactionScope的另类用法 88
4.6.2 最佳实践 89
4.7 管道 90
4.8 创建并发送新的行集 92
4.9 使用Windowsldentity 93
4.10 从SQLCLR调用一个Web服务 94
4.11 异常处理 97
4.12 SqlTriggerContext 101
4.13 不能在服务器端使用的SqlClient类 102
小结 102
第5章 用户定义的类型和聚合函数 103
5.1 为什么需要用户定义的类型 103
5.2 用户定义的类型概览 104
5.3 创建用户定义的类型 105
5.3.1 空值的实现 107
5.3.2 字符串的实现 108
5.3.3 二进制的实现 111
5.3.4 IBinarySerialize.Read/Write 113
5.3.5 创建用户定义类型 114
5.3.6 公共性质、字段和方法 116
5.3.7 帮助函数 122
5.3.8 验证用户定义类型 124
5.3.9 维护用户定义类型的定义 125
5.3.10 用户定义类型和XML 126
5.3.11 对象是否应该用用户定义类型来表示 131
5.3.12 用户定义的聚合函数 143
5.3.13 实现用户定义的聚合 145
5.3.14 创建用户定义的聚合函数 148
5.3.15 Format.Native与Format.UserDefined 148
小结 150
第6章 安全性 152
6.1 SQL Server 2005中新的安全性特征 152
6.2 默认设置为关闭的可选特征 153
6.2.1 配置安全性设置 153
6.2.2 安全性和元数据 155
6.3 增强的SQL Server安全性概念简单回顾 155
6.3.1 认证和授权:用户和权限 155
6.3.2 执行上下文和拥有权链 160
6.4 SQL Server密码策略和证书 163
6.5 加密密钥和内置加密函数 165
6.6 加密函数 167
6.7 用户和架构的分离 172
6.8 同义词 175
6.9 指定过程代码的执行上下文 176
6.10 代码签名 179
6.11 SQL Server权限和SQLCLR对象 181
6.12 程序集权限:谁可以编目和使用程序集 182
6.13.1 代码访问安全性入门 186
6.13 在SQL Server安全级别内,.NET Framework代码可以做什么? 186
6.13.2 代码访问安全性和.NET Framework程序集 187
小结 190
第7章 SQL引擎增强 191
7.1 SQL引擎的改进 191
7.2 SNAPSHOT隔离 191
7.2.1 版本控制的缺点 197
7.2.2 版本控制监视 198
7.3 数据定义语言触发器 199
7.4 事件通知 203
7.5 大值数据类型 205
7.7 语句级重编译 208
7.6 用新的BULK提供者加载数据 208
7.8 查询提示、计划指南和计划强制 209
小结 213
第8章 T-SQL语言的增强 215
8.1 Transact-SQL的改进 215
8.2 错误处理 215
8.3 INTERSECT和EXCEPT 225
8.4 TOP 228
8.5 ON DELETE和ON UPDATE 230
8.6 OUTPUT 232
8.7 APPLY操作符 235
8.8 通用表表达式 237
8.9 递归查询 243
8.10 PIVOT和UNPIVOT操作符 249
8.10.1 PIVOT 249
8.10.2 UNPIVOT 253
8.11 分级和分区 254
8.11 ROW_NUMBER 255
8.11.2 RANK 256
8.11.3 DENSE_RANK 257
8.11.4 NTILE 257
8.11.5 PARTITION BY 258
8.11.6 聚合分区 259
8.12 TABLESAMPLE 261
小结 264
第9章 数据库中的XML:XML数据类型 265
9.1 XML数据类型 265
9.2 在表中使用XML数据类型 266
9.3 使用XML数据变量和参数 270
9.4 有类型和无类型的XML:分类和使用XML架构集合 271
9.4.1 SQL Server XML架构集合 272
9.4.2 有类型的XML 273
9.4.3 XML架构和架构集合的管理 275
9.4.4 XML架构集合的安全性和强类型实例 277
9.5 在XML列中创建索引 278
9.6 XML类型函数 279
9.7 SELECT...FOR XML的增强 279
9.7.1 FOR XML PATH模式 281
9.7.2 生成XML数据类型 282
9.7.3 生成一个内联XSD格式的架构 283
9.7.4 NULL数据库值 284
9.7.5 产生根元素 285
9.7.6 其他特征 286
9.8.1 将SQL类型映射到XML类型 287
9.8 SQL和XML数据类型的映射 287
9.8.2 String,Binary和Decimal类型 288
9.8.3 其他通用的数据类型 289
9.8.4 Date数据类型 289
9.8.5 基于模式的数据类型 289
9.8.6 通配符数据类型 290
9.8.7 可为空性 290
9.9 增强的OpenXML 290
9.10 从文件加载XML到数据库中 291
9.11 ANSI SQL标准兼容性 292
9.11.1 XML数据类型 293
9.11.2 将SQL目录和表映射到XML 294
9.11.3 将SQL数据类型映射为XML数据类型 295
小结 296
第10章 XML查询语言:XQuery和XPath 297
10.1 什么是XQuery 297
10.2 XQuery入门 298
10.2.1 XQuery序 301
10.2.2 XQuery体 302
10.3 比较XQuery和SQL的异同 307
10.4 在XQuery中使用XML数据类型 310
10.4.1 xml.exist(字符串XQuery文本) 310
10.4.2 xml.value(字符串xquery文本,字符串SQLType) 311
10.4.3 xml.query(字符串XQuery文本) 313
10.4.4 xml.node(字符串XQuery文本) 315
10.4.5 XQuery标准函数和操作符 318
10.4.6 SQL Server XQuery函数和操作符 319
10.5 SQL Server支持的XQuery函数 319
10.6 SQL Server支持的Xquery操作符 320
10.6.1 SQL Server XQuery扩展函数 321
10.6.2 在SQL Server XQuery中的多文档查询 323
10.7 XML DML:更新XML列 323
10.7.1 xml.modify('insert...') 324
10.7.4 通用结论和最佳实践 327
10.7.2 xml.modify('delete...') 327
10.7.3 xml.modify('replace value of...') 327
10.8 在SQL Server内使用XQuery的一些特殊考虑 328
10.8.1 XML Schema和SQL Server 2005 XQuery 328
10.8.2 在XQuery中XML索引的用法 329
小结 331
第11章 SQL Server Service Broker 332
11.1 消息处理应用程序 332
11.2 消息处理 339
11.3 业务事务 343
11.3.1 服务程序 345
11.3.2 会话 349
11.3.3 会话组 352
11.3.4 消息类型 357
11.3.5 约定 360
11.3.6 SEND语句和消息类型 362
11.3.7 循环处理 364
11.3.8 毒药消息 368
11.3.9 补偿 369
11.3.10 分布式 370
小结 382
12.1 混合使用数据库和Web服务 383
第12章 作为Web服务平台的SQL Server 2005 383
12.1.1 HTTP端点声明 384
12.1.2 CREATE ENDPOINT语句 388
12.1.3 端点URL 389
12.1.4 端点状态 390
12.1.5 端点元数据 390
12.1.6 Web方法 391
12.1.7 Web服务定义语言 395
12.1.8 XML命名空间 417
12.1.9 生成WSDL 418
12.1.10 Web服务中的存储过程 426
12.1.11 SQL批处理 432
12.1.12 其他特征 436
12.1.13 SQLXML 4.0与SQL Server 2005 437
小结 445
第13章 SQL Server 2005与客户端 447
13.1 SQL本地客户端 447
13.2 新数据类型和数据类型兼容模式 449
13.3 用户自定义类型和关系数据访问API 450
13.4 在ADO.NET中使用NET Framework UDT 450
13.5 从DataReader中获取UDT 451
13.6 在ODBC、OLEDB和ADO客户端中使用.NETFramework UDT 456
13.7 在客户端支持XML数据类型 458
13.7.1 在ADO.NET中使用XML数据类型 458
13.7.2 把XML数据当作XML或字符串返回 460
13.7.3 文档、文档片断和FORXML支持 461
13.7.4 在经典ADO中使用XML数据类型 464
13.8 在客户端支持大值数据类型 465
13.9 查询通知支持 468
13.9.1 SQL Server2005中的查询通知 469
13.9.2 在OLEDB和ODBC中使用查询通知 471
13.9.3 向最终用户或缓存分发通知 472
13.9.5 使用SqlDependency 474
13.9.4 从数据库客户端使用查询通知 474
13.9.6 使用SqlNotification Request 476
13.9.7 在ASP.NET中使用SqlCacheDependency 478
13.9.8 主动通知 479
13.9.9 什么时候不该使用通知 480
13.10 多活动结果集 480
13.10.1 在ADO.NET 2.0中使用MARS 482
13.10.2 SQL本地客户端中的MARS 485
13.11 ADO.NET中新的事务和隔离特性 485
13.11.1 使用新的隔离级别 485
13.11.2 可升级、声明性事务 486
13.12.1 修改密码支持 488
13.12 SQL Server 2005登录相关的改变 488
13.12.2 故障转移支持 489
13.12.3 加密支持 490
13.13 对比存储过程的客户端和服务器端模型 491
小结 491
第14章 ADO.NET 2.0和SqlClient 492
14.1 使用ADO.NET 2.0基类和工厂进行泛型编程 492
14.2 提供者工厂 495
14.3 指定配置信息 497
14.4 枚举数据源和构造连接字符串 498
14.5 泛型编程的其他注意事项 500
14.6 ADO.NET 2.0中的架构 501
14.6.1 不管怎样,谁需要元数据呢 502
14.6.2 可以使用哪些元数据 503
14.6.3 定制和扩展元数据 506
14.6.4 用户定制 507
14.7 跟踪数据访问 509
14.7.1 安装数据跟踪 509
14.7.2 运行跟踪 511
14.7.3 把结果收集成CSV文件 511
14.7.5 用户数据和ADO.NET跟踪 512
14.7.4 阅读跟踪输出 512
14.7.6 配置对哪些应用程序进行跟踪 514
14.7.7 使用跟踪来调试一个参数绑定问题 515
14.7.8 深入数据跟踪 516
14.7.9 什么是ETW 517
14.8 异步支持 517
14.9 SqlClient中的批量导入 521
14.10 客户端统计 523
14.11 .NET Framework 2.0 DataSet和SqlDataAdapter增强 525
小结 527
15.1 简介 529
第15章 SQL Server管理对象 529
15.1.1 为什么使用SMO 531
15.1.2 ADO.NET与SMO的对比 533
15.2 对象模型 534
15.3 SMO项目 536
15.4 连接 539
15.4.1 默认的Windows认证连接 540
15.4.2 使用Runas 541
15.4.3 自动连接 541
15.4.4 仿冒其他Windows身份 542
15.4.5 SQL Server登录 543
15.4.6 修改SQL Server登录密码 544
15.4.7 连接管理 545
15.5 Server 546
15.6 SMO对象 547
15.6.1 对象标识和URN 547
15.6.2 GetSmoObject 549
15.6.3 URN对象获取限制 550
15.6.4 SMO对象模型 551
15.6.5 SMO属性 552
15.6.6 浏览SMO父对象 554
15.7 创建、修改和删除 555
15.6.7 SMO状态 555
15.8 脚本 559
15.9 配置管理 565
小结 566
第16章 通知服务 567
16.1 什么是SQL Server通知服务 567
16.2 通知应用程序 568
16.3 SQL Server通知服务的组件 570
16.4 通知应用程序设计模式 572
16.6 通知服务使用的术语 573
16.5 通知服务发送特性 573
16.7 设计、编码以及生成通知服务应用程序 574
16.7.1 计划步骤 574
16.7.2 编码步骤 575
16.7.3 应用程序生成步骤 575
16.8 一个示例通知服务应用程序 575
16.9 实例和应用程序配置文件 576
16.9.1 实例配置文件 576
16.9.2 应用程序定义文件 580
16.9.3 NSControl 582
16.10 事件 584
16.10.1 事件类型 584
16.10.2 事件存储过程 587
16.10.3 事件提供者 589
16.10.4 编目 592
16.11 订阅者和订阅 593
16.11.1 订阅类型 594
16.11.2 订阅者 595
16.11.3 订阅 597
16.12 通知 599
16.13 格式化器和分发器 602
16.14 发送 603
16.14.1 发送协议 604
小结 606
16.14.2 定制 606
第17章 结语:面向服务的数据库应用程序 607
17.1 许多新特性:怎样使用它们 607
17.2 数据模型、编程和SQL Server 607
17.3 任一层面的任一功能 608
17.4 什么才是最佳实践 609
17.5 朝着面向服务的数据库体系结构迈进 615
17.6 数据库作为平台的一部分 617
附录A .NET Framework 101 618
附录B SQL Server Management Studio 636
附录C Visual Studio 2005集成:SQL Server项目 654