第1章 数据类型相关的问题,XML和CLR UDT 1
1.1 DATETIME数据类型 2
DATETIME的存储格式 2
时间处理 3
Datetime相关的查询问题 8
1.2 与字符相关的问题 25
模式匹配 26
区分大小写(Case-Sensitive)的筛选器 31
1.3 大型对象(Large Object,LOB) 32
MAX说明符 32
BULK行集提供程序 34
1.4 隐式转换(Implicit Conversion) 36
标量表达式 36
筛选表达式 37
1.5 基于CLR的用户定义类型 40
UDT理论简介 41
开发UDT 48
1.6 XML数据类型 65
关系数据库中的XML支持 65
什么时候应该使用XML代替关系表现形式? 67
数据库中的XML序列化对象 68
使用开放架构(Open Schema)的XML 75
作为存储过程参数的XML数据类型 81
Xquery修改语句 82
1.7 结论 83
第2章 临时表和表变量 85
2.1 临时表 86
局部临时表 86
全局临时表 94
2.2 表变量 96
限制条件 96
tempdb 97
范围和可见性 97
事务上下文 97
统计信息 98
2.3 tempdb相关的注意事项 101
2.4 表表达式 102
2.5 比较临时对象 103
2.6 综合练习——关系分区(Relational Division) 104
2.7 结论 109
第3章 游标 111
3.1 使用游标 112
3.2 游标开销 114
3.3 单独处理每一行 115
3.4 按顺序访问 116
自定义聚合 116
连续聚合 118
最大并发会话 122
匹配问题 131
3.5 结论 138
第4章 动态SQL 139
4.1 EXEC 141
一个简单的EXEC示例 141
EXEC不提供接口 142
串联变量 145
EXEC AT 146
4.2 sp_executesql 149
sp_executesql接口 149
语句限制 152
4.3 环境设置 153
4.4 使用动态SQL 153
动态的维护操作 153
存储计算 156
动态筛选器 160
动态PIVOT/UNPIVOT 166
4.5 SQL注入 172
SQL注入:在客户端动态构建代码 172
SQL注入:在服务器端动态构建代码 173
防止SQL注入 177
4.6 结论 179
第5章 视图 181
5.1 什么是视图? 181
5.2 视图中的ORDER BY 183
5.3 刷新视图 187
5.4 模块化方法 189
5.5 更新视图 198
5.6 视图选项 202
ENCRYPTION 202
SCHEMABINDING 203
CHECK OPTION 204
VIEW_METADATA 205
5.7 索引视图(Indexed View) 206
5.8 结论 211
第6章 用户定义函数 213
6.1 关于UDF 214
6.2 标量UDF 214
T-SQL标量UDF 215
性能问题 217
在约束中使用UDF 219
CLR标量UDF 222
SQL签名(SQL Signature) 231
6.3 表值UDF 239
内联表值UDF 239
拆分数组(Split Array) 242
多语句表值UDF 248
6.4 逐行调用UDF 252
6.5 结论 255
第7章 存储过程 257
7.1 存储过程的种类 258
用户定义存储过程 258
特殊存储过程 262
系统存储过程 264
其他类型的存储过程 266
7.2 存储过程接口 267
输入参数 267
输出参数 269
7.3 解析 273
7.4 编译、重新编译和重用执行计划 275
重用执行计划 275
重新编译 281
参数嗅探问题 284
7.5 Execute As 288
7.6 参数化排序 289
7.7 动态Pivot 294
7.8 CLR存储过程 305
7.9 结论 313
第8章 触发器 315
8.1 AFTER触发器 316
inserted和deleted表 316
取得受影响的行数 318
识别触发器的类型 321
对特殊语句不引发触发器 324
嵌套和递归 328
UPDATE和COLUMNS_UPDATED 329
审核示例 333
8.2 INSTEAD OF触发器 335
逐行触发器 336
应用于视图 339
自动处理序列 342
8.3 DDL触发器 344
数据库级触发器 346
服务器级触发器 350
8.4 CLR触发器 351
8.5 结论 360
第9章 事务 361
9.1 什么是事务? 362
9.2 锁 364
9.3 隔离级别 370
未提交读 371
已提交读 372
可重复读 373
可串行读 374
新的隔离级别 375
9.4 保存点 381
9.5 死锁 383
简单的死锁 384
因缺少索引导致的死锁 385
单个表的死锁 388
9.6 结论 390
第10章 错误处理 391
10.1 SQL Server 2005之前版本的错误处理 391
10.2 SQL Server 2005中的错误处理 395
TRY/CATCH 395
事务中的错误 399
死锁和更新冲突 404
10.3 结论 409
第11章 Service Broker 411
11.1 会话对话 411
会话 412
约定(Contract) 417
DEFAULT 418
队列(Queue) 418
服务(Services) 423
发起和结束对话 424
会话端点(Conversation Endpoint) 426
会话组(Conversation Group) 428
发送和接收 430
11.3 简单的对话 434
有害消息(Poison Message) 442
11.4 对话安全 443
非对称密钥认证 444
配置对话安全 445
11.5 路由和分发 448
相邻Broker协议(Adjacent Broker Protocol) 449
路由(Route) 455
11.6 场景 460
可靠的SOA 460
异步处理 461
11.7 哪里适合使用Service Broker 462
Service Broker是什么 462
Service Broker不是什么 462
Service Broker和MSMQ 462
Service Broker和BizTalk 463
Service Broker和Windows Communication Foundation 463
11.8 结论 464
附录A CLR程序指南 465
A.1 创建CLRUtilities数据库:SQL Server 466
A.2 部署:Visual Studio 466
A.3 部署和测试:Visual Studio和SQL Server 467
索引 491
中英文术语对照表 509
关于作者 513