第1章 SELECT1
1.1 基本的SELECT语句1
1.1.1 从表中选择指定列2
1.1.2 从所有行中选择所有列2
1.2 使用基本WHERE子句进行有选择的查询3
1.2.1 使用WHERE子句指定结果集中返回的行3
1.2.2 组合搜索条件4
1.2.3 否定搜索条件5
1.2.4 保持WHERE子句无歧义5
1.3 使用运算符和表达式6
1.3.1 在日期范围搜索中使用BETWEEN7
1.3.2 使用比较运算符8
1.3.3 检测NULL值9
1.3.4 基于一组值返回行9
1.3.5 LIKE和通配符结合使用9
1.3.6 声明变量及为变量赋值11
1.4 数据分组12
1.4.1 使用GROUPBY子句12
1.4.2 使用GROUPBYALL13
1.4.3 使用HAVING选择性地查询分组的数据13
1.5 对结果排序14
1.5.1 使用ORDERBY子句15
1.5.2 在排序的结果中使用TOP关键字16
1.6 SELECT子句技术18
1.6.1 使用DISTINCT消除重复值18
1.6.2 在聚合函数中使用DISTINCT18
1.6.3 使用列别名19
1.6.4 使用SELECT创建脚本20
1.6.5 字符串拼接21
1.6.6 使用SELECT创建逗号分隔的列表21
1.6.7 使用INTO子句22
1.7 子查询23
1.8 从多个数据源查询24
1.8.1 使用内联结25
1.8.2 使用外联结26
1.8.3 使用交叉联结27
1.8.4 在同一查询中多次引用同一个表27
1.8.5 使用衍生表28
1.8.6 使用UNION组合结果集29
1.9 使用APPLY来为每行调用表值函数30
1.9.1 使用CROSSAPPLY30
1.9.2 使用OUTERAPPLY32
1.10 数据源高级技术33
1.10.1 使用TABLESAMPLE来返回随机行33
1.10.2 使用PIVOT把单列值转化为多列和聚合数据34
1.10.3 使用UNPIVOT规范化数据36
1.10.4 使用EXCEPT和INTERSECT返回不重复的或匹配的行38
1.11 汇总数据40
1.11.1 使用CUBE汇总数据40
1.11.2 使用ROLLUP来汇总数据42
1.11.3 使用分组集创建自定义汇总43
1.11.4 展现GROUPING生成的行44
1.11.5 使用GROUPING_ID标识分组级别46
1.12 公共表表达式49
1.12.1 使用非递归的公共表表达式49
1.12.2 使用递归的公共表表达式52
第2章 执行、捕获和跟踪数据修改55
2.1 INSERT55
2.1.1 向表中插入一行55
2.1.2 使用默认值插入行56
2.1.3 显式向一个IDENTITY列插入值57
2.1.4 在表中插入拥有uniqueidentifier列的行59
2.1.5 使用INSERT...SELECT语句插入行59
2.1.6 调用存储过程插入数据60
2.1.7 通过VALUES插入多个行62
2.1.8 将VALUES作为表源来使用62
2.2 UPDATE63
2.2.1 更新一行64
2.2.2 根据FROM和WHERE子句更新行65
2.2.3 更新大值数据类型的列66
2.2.4 使用OPENROWSET和BULK插入或更新图片文件68
2.2.5 在维护SQLServer事务控制时向文件系统存储非结构化数据69
2.2.6 “就地”赋值并修改数据库值73
2.3 DELETE75
2.3.1 删除行75
2.3.2 截断表76
2.4 高级数据修改技术77
2.4.1 使用TOP分块修改数据77
2.4.2 在一条语句中执行INSERT、UPDATE和DELETE78
2.5 捕获和跟踪数据修改的改变81
2.5.1 返回数据修改语句影响的行81
2.5.2 异步捕获表数据修改83
2.5.3 从CDC表查询所有变更87
2.5.4 从CDC表查询净变更89
2.5.5 翻译CDC更新掩码90
2.5.6 使用LSN边界92
2.5.7 禁用对表和数据库的变更数据捕获93
2.5.8 以最小的磁盘开销跟踪净数据更改93
第3章 事务、锁定、阻塞和死锁100
3.1 事务控制100
3.1.1 使用显式事务101
3.1.2 使用DBCCOPENTRAN显示最早的活动事务104
3.1.3 通过会话查询事务信息104
3.2 锁定106
3.2.1 查看锁的活动108
3.2.2 控制表的锁升级行为109
3.3 事务、锁定和并发110
3.4 阻塞115
3.4.1 找到并解决阻塞进程116
3.4.2 配置语句等待锁释放的时长118
3.5 死锁118
3.5.1 使用跟踪标志位找出死锁119
3.5.2 设置死锁优先级121
第4章 表123
4.1 表基础123
4.1.1 创建表126
4.1.2 为既有表添加列126
4.1.3 修改列定义127
4.1.4 创建计算列128
4.1.5 减少NULL列的存储空间129
4.1.6 删除表中的列131
4.1.7 报告表信息132
4.1.8 删除表132
4.2 排序规则基础133
4.2.1 查看排序规则元数据133
4.2.2 指定列的排序规则134
4.3 键134
4.3.1 创建有主键的表135
4.3.2 为既有表增加主键约束136
4.3.3 创建一个有外键引用的表136
4.3.4 为既有表增加外键137
4.3.5 创建递归外键引用138
4.3.6 允许外键的级联修改139
4.4 代理键140
4.4.1 在创建表的时候使用IDENTITY属性141
4.4.2 使用DBCCCHECKIDENT来查看和纠正IDENTITY种子值142
4.4.3 使用ROWGUIDCOL属性143
4.5 约束143
4.5.1 创建唯一约束144
4.5.2 为既有表增加UNIQUE约束145
4.5.3 使用CHECK约束145
4.5.4 为既有表增加CHECK约束146
4.5.5 禁止和启用约束147
4.5.6 在表创建时使用DEFAULT约束148
4.5.7 为既有表增加DEFAULT约束149
4.5.8 从表删除约束150
4.6 临时表和表变量150
4.6.1 使用临时表在批处理中进行多次查找151
4.6.2 创建表变量来保存临时结果集152
4.7 管理超大型表153
4.7.1 实现表分区154
4.7.2 确定数据在分区中的位置157
4.7.3 增加新的分区158
4.7.4 移除分区160
4.7.5 把分区移动到不同的表161
4.7.6 移除分区函数和分区方案162
4.7.7 用文件组提高VLDB的可管理性162
4.7.8 用数据压缩减少磁盘空间使用164
第5章 索引167
5.1 索引预览167
5.1.1 创建表索引169
5.1.2 在非键列上强制唯一性170
5.1.3 在多个列上创建索引171
5.1.4 定义索引列排序方向172
5.1.5 查看索引元数据172
5.1.6 禁用索引174
5.1.7 删除索引174
5.1.8 使用DROP_EXISTING改变既有索引174
5.2 控制索引创建的性能和并发性175
5.2.1 在tempdb中创建临时索引175
5.2.2 控制索引创建的并行执行计划176
5.2.3 在索引创建过程中允许用户表访问176
5.3 索引选项177
5.3.1 使用索引INCLUDE177
5.3.2 使用PAD_INDEX和FILLFACTOR178
5.3.3 禁用页和/或行索引锁定178
5.4 管理超大型索引179
5.4.1 在文件组上创建索引180
5.4.2 实现索引分区180
5.4.3 为行的子集做索引181
5.4.4 减小索引的大小182
第6章 全文搜索183
6.1 全文索引和全文目录183
6.1.1 创建全文目录183
6.1.2 创建全文索引184
6.1.3 修改全文目录186
6.1.4 修改全文索引187
6.1.5 检索全文目录和索引元数据189
6.1.6 从全文索引中去掉普通字符串190
6.1.7 删除全文索引193
6.1.8 删除全文目录193
6.2 基本搜索194
6.2.1 使用FREETEXT来搜索全文索引的列194
6.2.2 使用CONTAINS来搜索单词195
6.3 高级搜索196
6.3.1 使用CONTAINS和通配符来搜索196
6.3.2 使用CONTAINS来搜索变形匹配196
6.3.3 使用CONTAINS根据词的相邻搜索结果197
6.4 排名搜索197
6.4.1 根据含义返回排名搜索结果198
6.4.2 根据权值返回排名搜索结果199
第7章 视图201
7.1 普通视图201
7.1.1 创建基本视图202
7.1.2 查询视图定义203
7.1.3 显示视图及其结构204
7.1.4 刷新视图定义205
7.1.5 修改视图206
7.1.6 删除视图206
7.1.7 使用视图修改数据206
7.2 视图加密207
7.3 索引视图208
7.3.1 创建索引视图208
7.3.2 强制优化器为索引视图使用索引210
7.4 分区视图211
第8章 SQLServer函数216
8.1 聚合函数216
8.1.1 返回平均值217
8.1.2 返回行总数217
8.1.3 找出表达式中的最小值和最大值218
8.1.4 返回值的和218
8.1.5 使用统计聚合函数219
8.2 数学函数219
8.3 字符串函数221
8.3.1 把字符值转化为ASCII以及把ASCII转回字符222
8.3.2 返回整数和字符Unicode值222
8.3.3 获取某个字符串在另一个字符串中的起始位置223
8.3.4 使用通配符找到某个字符串在另一个字符串中的起始位置223
8.3.5 检测字符串相似度224
8.3.6 获取字符串最左和最右部分224
8.3.7 检测字符串中的字符数或者字节数225
8.3.8 把字符串的一部分替换成另一个字符串226
8.3.9 把字符串填充到字符串中226
8.3.10 在小写和大写之间进行转化227
8.3.11 移除前导空格和尾部空格228
8.3.12 重复一个表达式N次228
8.3.13 重复一个空格N次229
8.3.14 逆序输出表达式229
8.3.15 返回表达式的一块229
8.4 处理NULL230
8.4.1 用另一个值替换NULL值230
8.4.2 使用ISNULL进行灵活的搜索230
8.4.3 返回表达式列表中第一个非NULL值232
8.4.4 当两个表达式相等的时候返回NULL值,否则返回第一个表达式232
8.5 日期函数233
8.5.1 返回当前日期和时间233
8.5.2 在时区间进行转换234
8.5.3 增加或减少日期值235
8.5.4 找出两个日期的差236
8.5.5 显示日期一部分的字符串值237
8.5.6 使用DATEPART显示日期一部分的整数值237
8.5.7 使用YEAR、MONTH和DAY显示日期一部分的整数值238
8.6 类型转换238
8.6.1 转换数据类型238
8.6.2 将日期转换为文本形式239
8.6.3 以字符串字面量表示二进制数据240
8.6.4 计算表达式返回的数据类型241
8.7 排名函数242
8.7.1 生成递增行号242
8.7.2 根据排名返回行244
8.7.3 根据无间隔排名返回行245
8.7.4 使用NTILE246
8.8 使用系统函数检测服务器、数据库以及连接级别的配置246
8.8.1 确定每周的第一天246
8.8.2 查看当前会话使用的语言247
……
第9章 条件处理、流控制和游标258
第10章 存储过程273
第11章 用户定义函数和类型289
第12章 触发器315
第13章 CLR集成339
第14章 XML、分层和空间数据354
第15章 提示380
第16章 错误处理388
第17章 主体401
第18章 安全对象、权限和审核423
第19章 加密462
第20章 Service Broker489
第21章 配置和查看SQL Server的 选项520
第22章 创建和配置数据库524
第23章 数据库完整性和优化565
第24章 维护数据库对象和对象依赖 关系579
第25章 数据库镜像587
第26章 数据库快照603
第27章 链接服务器和分布式查询608
第28章 查询性能调优621
第29章 备份与恢复662
索引691