CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《深入解析SQL Server 2008》的随书源代码 对应的书籍资料见: 深入解析SQL Server 2008(微软SQL Server开发团队必读之作) 基本信息 原书名: Microsoft SQL Server 2008 Internals 原出版社: Microsoft Press 作者: (美)Kalen Delaney Paul S. Randal Kimberly L. Tripp Conor Cunningham Adam Machanic 译者: 陈宝国 李光杰 薛赛男 出版社:人民邮电出版社 ISBN:9787115230799 上架时间:2010-7-16 出版日期:2010 年7月 开本:16开 页码:548 版次:1-1 编辑推荐 由知识丰富的资深专家和数位具有多年产品使用经验的讲师联手打造 深层次展示核心引擎的功能及其工作原理、深度揭示SQL Server的内部工作原理 书中大量截图,帮助新用户以及中级用户快速学习使用产品 内容简介 本书全面探讨了sql server 2008的内部工作原理。全书共分为11章,首先在第1章中详细介绍了sql server 2008的架构和配置,然后在接下来的10个章节中深入探讨了sql server 2008数据存储和查询处理等各个方面的内部机制,包括:数据库和数据库文件、表、索引、跟踪、日志记录和恢复、特殊存储、查询优化、计划缓存和重新编译、事务和并发、dbcc等。本书还有一个网站,上面有本书额外的第12章“查询执行”、本书的所有代码及其他工具和脚本。 本书由知识丰富的资深专家和数位具有多年产品使用经验的讲师联手打造,是一本关于sql server工作原理的权威参考指南,不管您是数据库开发人员、架构师,还是数据库管理员,都可以从阅读本书中获益。 深层次展示核心引擎的功能及其工作原理 借助著名内部专家小组的指导,深入探究核心sql server引擎,并把这些知识运用在实际工作中、无论您是数据库开发人员、架构师,还是管理员,都能获得利用关键架构变更所需的深层知识,并挖掘产品的全部潜力。 深度揭示sql server的内部工作原理: 当sql server编译、扩展、压缩和移动数据库时,内部在进行什么操作 如何使用事件跟踪——从触发器到扩展事件引擎 为什么合适的索引能大大减少查询执行时间 如何用新的存储能力超越正常的行数限制 查询优化器是如何运行的 为有问题的查询计划排除故障的多种技术 何时强制sql server重用或创建新的缓存查询计划 运行dbcc时,sqlserver在内部检查什么 处理多个并发用户时,如何在5个隔离级别和2个并发模型中做出选择 作译者 Kalen Delanev自1993年起就是微软SQL Server的MVP,她为全世界的客户提供高级SQL Server培训、她是《SQL Server Magazine》的特约编辑和专栏作家,也是几本读者推崇的书籍的作者,包括《Inside Microsoft SQL Server 2005:The Storage Engine》和《Inside Microson SQL Server 2005:Query Tuning and Optimization》。 Paul S.Randal微软MVP、培训师和TechNet Magazine的特约编辑。Kimberly L.Tripp是微软MVP、培训师和《SQL Server Magazine》的特约编辑。 Conor Cunninqham微软SQL Server Core Engine团队的首席架构师. Adam Machanic MCITP、微软MVP、讲师,几本SQL Server书籍的合著者. Ben Nevarez从6.45版本开始使用SQL Server,是高级数据库管理员. 目录 封面 -20 封底 -19 扉页 -18 版权 -17 内容提要 -16 序 -14 前言 -13 致谢 -11 关于作者 -8 目录 -6 第1章 SQL Server 2008架构和配置 1 1.1 SQL Server版本 1 1.2 SQL Server元数据 2 1.2.1 兼容性视图 2 1.2.2 目录视图 3 1.2.3 其他元数据 4 1.3 SQL Server引擎组件 6 1.3.1 观察引擎行为 7 1.3.2 协议 8 1.3.3 关系引擎 9 1.3.4 存储引擎 10 1.4 SQLOS 13 1.5 计划程序 14 1.5.1 SQL Server工作线程 15 1.5.2 将计划程序绑定到CPU中 17 1.5.3 专用管理员连接(DAC) 20 1.6 内存 21 1.6.1 缓冲池与数据缓存 21 1.6.2 访问内存中的数据页 21 1.6.3 管理数据缓存中的页面 22 1.6.4 可用缓冲区列表和惰性编写器 22 1.6.5 检查点 23 1.6.6 管理其他缓存中的内存 24 1.6.7 调节内存大小 25 1.6.8 调节缓冲池大小 26 1.7 服务器资源调控器 30 1.7.1 资源调控器概述 30 1.7.2 资源调控器控制 37 1.7.3 资源调控器元数据 38 1.8 SQL Server 2008配置 39 1.8.1 使用SQL Server配置管理器 39 1.8.2 配置网络协议 39 1.8.3 默认的网络配置 39 1.8.4 管理服务 40 1.9 SQL Server系统配置 41 1.9.1 操作系统配置 41 1.9.2 跟踪标记 43 1.10 服务器配置设置 43 1.11 小结 52 第2章 更改跟踪、跟踪和扩展事件 53 2.1 基础知识:触发器和事件通知 53 2.1.1 运行时触发器行为 53 2.2 更改跟踪 54 2.2.1 更改跟踪配置 54 2.2.2 更改跟踪的运行时行为 57 2.3 跟踪和事件探查 60 2.3.1 SQL跟踪架构和术语 61 2.3.2 安全性和权限 62 2.3.3 Profiler入门 63 2.3.4 服务器端跟踪和收集 70 2.4 扩展事件 78 2.4.1 XE体系结构的组件 79 2.4.2 事件会话 86 2.4.3 扩展事件DDL和查询 88 2.5 小结 91 第3章 数据库和数据库文件 92 3.1 系统数据库 92 3.1.1 master 93 3.1.2 model 93 3.1.3 tempdb 93 3.1.4 资源数据库 93 3.1.5 msdb 94 3.2 样例数据库 94 3.2.1 AdventureWorks 94 3.2.2 pubs 95 3.2.3 Northwind 95 3.3 数据库文件 95 3.4 创建数据库 97 3.4.1 CREATE DATABASE例子 99 3.5 扩展或收缩数据库 99 3.5.1 自动文件扩展 100 3.5.2 手动文件扩展 100 3.5.3 快速文件初始化 100 3.5.4 自动收缩性 100 3.5.5 手动收缩 101 3.6 使用数据库文件组 102 3.6.1 默认文件组 102 3.6.2 FILEGROUP CREATION例子 103 3.6.3 文件流文件组 104 3.7 修改数据库 105 3.7.1 ALTER DATABASE例子 106 3.8 数据库剖析 107 3.8.1 空间分配 107 3.9 设置数据库选项 110 3.9.1 状态选项 112 3.9.2 游标选项 114 3.9.3 自动选项 115 3.9.4 SQL选项 115 3.9.5 数据库恢复选项 116 3.9.6 其他数据库选项 117 3.10 数据库快照 117 3.10.1 创建数据库快照 118 3.10.2 数据库快照使用的空间 119 3.10.3 管理快照 120 3.11 tempdb数据库 121 3.11.1 tempdb中的对象 121 3.11.2 tempdb中的优化 122 3.11.3 最佳实践 123 3.11.4 tempdb空间监视 124 3.12 数据库安全性 124 3.12.1 数据库访问 125 3.12.2 管理数据库安全性 126 3.12.3 数据与架构 127 3.12.4 主体与架构 127 3.12.5 默认架构 128 3.13 移动或复制数据库 128 3.13.1 分离和重新附加数据库 128 3.13.2 备份和还原数据库 130 3.13.3 移动系统数据库 130 3.13.4 移动master数据库 131 3.14 兼容性级别 131 3.15 小结 132 第4章 日志记录和恢复 133 4.1 事务日志基础 133 4.1.1 恢复阶段 134 4.1.2 读日志 137 4.2 更改日志大小 137 4.2.1 虚拟日志文件 137 4.2.2 观察虚拟日志文件 138 4.2.3 自动截断虚拟日志文件 141 4.2.4 维护可恢复日志 142 4.2.5 自动压缩日志 144 4.2.6 日志文件大小 145 4.3 备份和还原数据库 145 4.3.1 备份类型 145 4.3.2 恢复模型 146 4.3.3 选择备份类型 149 4.3.4 还原数据库 150 4.4 小结 154 第5章 表 155 5.1 创建表 155 5.1.1 命名表和列 156 5.1.2 保留关键字 157 5.1.3 分隔标识符 157 5.1.4 命名约定 158 5.1.5 数据类型 158 5.1.6 关于NULL 178 5.2 用户定义数据类型 180 5.3 IDENTITY属性 181 5.4 内部存储 184 5.4.1 sys.indexes目录视图 185 5.4.2 数据存储元数据 186 5.4.3 数据页 189 5.4.4 检查数据页 190 5.4.5 数据行的结构 193 5.4.6 查找一个物理页面 195 5.4.7 固定长度行的存储 197 5.4.8 可变长度行的存储 199 5.4.9 日期和时间数据的存储 204 5.4.10 sql_variant数据的存储 206 5.5 约束 209 5.5.1 约束名称和目录视图信息 210 5.5.2 视图和多行数据修改中出现的约束故障 211 5.6 修改表 212 5.6.1 更改数据类型 212 5.6.2 添加一个新列 213 5.6.3 添加、删除、禁用或启用约束 213 5.6.4 删除列 214 5.6.5 启用或禁用一个触发器 215 5.6.6 修改表的内部 215 5.7 堆修改内部 217 5.7.1 分配结构 217 5.7.2 插入行 218 5.7.3 删除行 219 5.7.4 更新行 221 5.8 小结 224 第6章 索引:内部和管理 225 6.1 概述 225 6.1.1 SQL Server索引B树 226 6.2 分析索引的工具 228 6.2.1 使用dm_db_index_physical_stats动态管理视图 228 6.2.2 使用DBCC ID 231 6.3 理解索引结构 233 6.3.1 聚集键的依赖关系 234 6.3.2 非聚集索引 236 6.3.3 约束和索引 236 6.4 索引创建选项 237 6.4.1 IGNORE_DUP_KEY 238 6.4.2 STATISTICS_NORECOM PUTE 238 6.4.3 MAXDOP 238 6.4.4 索引放置 238 6.4.5 约束和索引 239 6.5 物理索引结构 239 6.5.1 索引行格式 239 6.5.2 聚集索引结构 240 6.5.3 聚集索引的非叶级 241 6.5.4 分析聚集索引结构 241 6.5.5 非聚集索引结构 246 6.6 特殊索引结构 255 6.6.1 计算列上的索引和索引视图 255 6.6.2 全文索引 262 6.6.3 空间索引 262 6.6.4 XML索引 262 6.7 数据修改的内部 263 6.7.1 插入行 263 6.7.2 拆分页 264 6.7.3 删除行 267 6.7.4 更新行 272 6.7.5 表级数据修改与索引级数据修改 275 6.7.6 日志记录 276 6.7.7 锁定 276 6.7.8 碎片 276 6.8 管理索引结构 277 6.8.1 删除索引 277 6.8.2 ALTER INDEX 278 6.8.3 检测碎片 279 6.8.4 删除碎片 280 6.8.5 重建索引 282 6.9 小结 284 第7章 特殊存储 285 7.1 大型对象存储 285 7.1.1 长度受限的大型对象数据(行溢出数据) 285 7.1.2 不限长度大型对象数据 289 7.1.3 最大长度数据的存储 294 7.2 文件流数据 295 7.2.1 为SQL Server启用文件流数据 295 7.2.2 创建一个启用文件流的数据库 296 7.2.3 创建一张表存储文件流数据 297 7.2.4 操纵文件流数据 298 7.2.5 文件流数据的元数据 302 7.2.6 文件流数据性能方面的考虑 304 7.3 稀疏列 305 7.3.1 稀疏列的管理 305 7.3.2 列集和稀疏列操作 307 7.3.3 物理存储 309 7.3.4 元数据 311 7.3.5 利用稀疏列节省存储空间 312 7.4 数据压缩 315 7.4.1 Vardecimal 315 7.4.2 行压缩 315 7.4.3 页压缩 322 7.5 表和索引分区 329 7.5.1 分区函数和分区方案 330 7.5.2 分区的元数据 331 7.5.3 分区的滑动窗口优势 334 7.6 小结 336 第8章 查询优化器 337 8.1 概述 337 8.1.1 树格式 337 8.2 什么是优化 338 8.3 查询优化器如何研究查询计划 339 8.3.1 规则 339 8.3.2 属性 339 8.3.3 替代项的存储——“备注” 341 8.3.4 运算符 341 8.4 优化器架构 346 8.4.1 优化之前 347 8.4.2 简化 347 8.4.3 琐碎计划/自动参数化 347 8.4.4 限制 348 8.4.5 备注——有效地探索多项计划 349 8.5 统计信息、基数估计和开销 350 8.5.1 统计信息设计 351 8.5.2 密度/频度信息 353 8.5.3 筛选的统计信息 355 8.5.4 字符串统计信息 356 8.5.5 基数估计细节 356 8.5.6 限制 359 8.5.7 成本计算 360 8.6 索引选择 361 8.6.1 筛选索引 363 8.6.2 索引视图 365 8.7 分区表 369 8.7.1 分区对齐索引视图 372 8.8 数据仓库 372 8.9 更新 372 8.9.1 Halloween保护 375 8.9.2 拆分/排序/折叠 375 8.9.3 合并 377 8.9.4 大范围更新计划 379 8.9.5 稀疏列更新 381 8.9.6 分区更新 381 8.9.7 锁定 384 8.10 分布式查询 385 8.11 扩展的索引 387 8.11.1 全文索引 387 8.11.2 XML索引 387 8.11.3 空间索引 388 8.12 计划提示 389 8.12.1 调试计划问题 389 8.12.2 {HASH|ORDER}GROUP 391 8.12.3 {MERGE|HASH|CONCAT}UNION 391 8.12.4 FORCE ORDER, {LOOP | MERGE | HASH } JOIN 391 8.12.5 INDEX=indexname | indexid 392 8.12.6 FORCESEEK 392 8.12.7 FAST number_rows 393 8.12.8 MAXDOP N 393 8.12.9 OPTIMIZE FOR 393 8.12.10 PARAMETRIZATION {SIMPLE|FORCED} 395 8.12.11 NOEXPAND 395 8.12.12 USE PLAN 395 8.13 小结 397 第9章 计划缓存和重新编译 398 9.1 计划缓存 398 9.1.1 计划缓存元数据 398 9.1.2 清除计划缓存 399 9.2 缓存机制 399 9.2.1 即席查询缓存 400 9.2.2 即席工作负荷优化 402 9.2.3 简单参数化 404 9.2.4 已准备查询 408 9.2.5 已编译对象 410 9.2.6 重新编译的原因 412 9.3 计划缓存内部 420 9.3.1 缓存存储 420 9.3.2 编译计划 421 9.3.3 执行上下文 422 9.3.4 计划缓存元数据 422 9.3.5 句柄 422 9.3.6 sys.dm_exec_sql_text 423 9.3.7 sys.dm_exec_query_plan 424 9.3.8 sys.dm_exec_text_query_plan 424 9.3.9 sys.dm_exec_cached_plans 425 9.3.10 sys.dm_exec_cached_plan_dependent_objects 425 9.3.11 sys.dm_exec_requests 425 9.3.12 sys.dm_exex_query_stats 426 9.3.13 缓存大小管理 426 9.3.14 缓存项的成本 429 9.4 计划缓存中的对象:概况 429 9.5 缓存中的多个计划 431 9.6 何时使用存储过程和其他缓存机制 432 9.7 计划缓存问题故障排除 432 9.7.1 等待统计信息表明存在计划缓存问题 432 9.7.2 其他缓存问题 434 9.7.3 处理编译和重新编译问题 434 9.7.4 计划指南和优化提示 435 9.8 小结 444 第10章 事务和并发性 445 10.1 并发模型 445 10.1.1 悲观并发 445 10.1.2 乐观并发 445 10.2 事务处理 446 10.2.1 ACID属性 446 10.2.2 事务依赖性 447 10.2.3 隔离级别 448 10.3 锁定 451 10.3.1 锁定基础 451 10.3.2 旋转锁 452 10.3.3 用户数据的锁类型 452 10.3.4 锁模式 452 10.3.5 锁粒度 455 10.3.6 锁的持续时间 460 10.3.7 锁的所有权 460 10.3.8 查看锁 461 10.3.9 锁定示例 463 10.4 锁兼容性 468 10.5 锁定内部架构 469 10.5.1 锁分区 470 10.5.2 锁块 471 10.5.3 锁所有者块 472 10.5.4 syslockinfo表 472 10.6 行级别锁与页级别锁 475 10.6.1 锁升级 475 10.6.2 死锁 477 10.7 行版本控制 480 10.7.1 行版本控制概述 480 10.7.2 行版本控制细节 481 10.7.3 基于快照的隔离级别 481 10.7.4 选择并发模型 496 10.8 控制锁定 497 10.8.1 锁提示 497 10.8.2 设置锁超时 499 10.9 小结 500 第11章 DBCC揭秘 501 11.1 获得数据库的一致性视图 502 11.1.1 获得一致性视图 502 11.2 有效地处理数据库 504 11.2.1 事实生成 505 11.2.2 使用查询处理器 506 11.2.3 批处理 508 11.2.4 读取要处理的页 509 11.2.5 并行性 509 11.3 早期的系统目录一致性检查 511 11.4 分配一致性检查 512 11.4.1 收集分配事实 512 11.4.2 检查分配事实 513 11.5 按表进行逻辑一致性检查 514 11.5.1 元数据一致性检查 515 11.5.2 页审核 516 11.5.3 数据和索引页处理 518 11.5.4 列处理 519 11.5.5 文本页处理 522 11.5.6 跨页一致性检查 523 11.6 跨表一致性检查 532 11.6.1 Service Broker一致性检查 532 11.6.2 跨目录一致性检查 533 11.6.3 索引视图一致性检查 533 11.6.4 XML索引一致性检查 534 11.6.5 空间索引一致性检查 534 11.7 DBCC CHECKDB输出 535 11.7.1 标准输出 535 11.7.2 SQL Server错误日志输出 537 11.7.3 应用程序事件日志输出 538 11.7.4 进度报告输出 538 11.8 DBCC CHECKDB选项 539 11.8.1 NOINDEX 540 11.8.2 修复选项 540 11.8.3 ALL_ERRORMSGS 540 11.8.4 EXTENDED_LOGICAL_CHECKS 541 11.8.5 NO_INFOMSGS 541 11.8.6 TABLOCK 541 11.8.7 ESTIMATEONLY 541 11.8.8 PHYSICAL_ONLY 542 11.8.9 DATA_PURITY 542 11.9 数据库修复 542 11.9.1 修复机制 543 11.9.2 紧急模式修复 544 11.9.3 哪些数据可以由修复删除 545 11.10 除DBCC CHECKDB之外的一致性检查命令 545 11.10.1 DBCC CHECKALLOC 546 11.10.2 DBCC CHECKTABLE 547 11.10.3 DBCC CHECKFILEGR OUP 547 11.10.4 DBCC CHECKCATALOG 547 11.10.5 DBCC CHECKIDENT 548 11.10.6 DBCC CHECKCONSTRAINTS 548 11.11 小结 548 前言 您现在拿的这本书是“InsideSQLServer”系列的后续,该系列包括((hnside SQL Server 6.5》、《Inside SQL Server7》、《Inside SQL Server 2000))和《Inside SQL Server 2005》(共4卷)。Inside系列变得太分散,“揭秘(1nside)”这个词也被其他作者甚至出版商扭曲了。我需要一个更具指示性的标题来说明本书的真正内容。 本书讲述微软公司的旗舰关系数据库产品——SQL Server的工作原理。此外,我还会解释如何利用有关工作原理方面的知识来获得更好的产品性能,不过这只是顺便得到的,并不是目标。市场上有其他几十本书讲述SQLServer的优化和最佳实践,本书则帮您理解为什么某些优化实践是那样工作的,也帮您在作为开发人员、数据架构师或DBA继续使用SQL Server的过程中,确定自己的最佳实践。 本书的读者 本书是为想深入理解SQL Server内在工作原理的所有人撰写的。它的重点是核心SQL Server引擎,特别是查询处理器和存储引擎。我希望大家有一些使用SQL Server引擎和T-SQL的经验。您无需是这两方面的专家,但是如果渴望成为专家并愿意了解提交查询执行以后SQL Server实际上做了些什么,本书会有所帮助。 本系列不讨论客户端编程界面、异类查询、商业智能或复制。实际上,大部分高可用性的功能都没有讲,但是在我们讨论数据库属性设置时,从较高层次讨论了一些功能,如镜像。我不会深入到一些内部操作的细节(如安全性)中,因为这是很大的话题,应当单独用整本书来讲。 我希望您看到的是满上的那半杯,而不是空着的那半杯,也就是能从本书所讲内容受益,而对于那些没有包括的主题,希望您能在其他资源中找到相关信息。 本书的内容 本书提供SQL Server处理查询和管理数据过程中的详细信息。首先在第1章中概述SQL Server关系数据库系统架构,然后在后面10章中继续研究查询处理和数据存储的多个方面。各章安排如下。 第1章SQL Server2008架构和配置 第2章更改跟踪、跟踪和扩展事件 第3章数据库和数据库文件 第4章日志记录和恢复 第5章表 第6章索引:内部和管理 第7章特殊存储 第8章查询优化器 第9章计划缓存和重新编译 第10章事务和并发性 第11章DBCC揭秘 第12章可从随附内容(在下一节中讲述)获得,它讨论阅读查询计划的详细信息。这—章叫“查 . 询执行”,是我的前一本书《Inside SQL Server 2005:Query Tuning and Optimization》的一部分。因为. 本章的99%对SQL Server 2008仍然适用,所以我就把它“原封不动”地包括进来作为附加参考。随附内容 本书有一个随附网站,上面有本书使用的所有代码,按章排列。随附内容还包括一章我以前 写的书,以及我的书《SQL Server 2000》中的一章(“History of SQL Server”)。该站点还提 供了额外的脚本和工具,增强您对SQL Server内部的体验和理解。您可以从以下地址访问随附站 点上的内容:http://www.SQL Server Intemals.com/companion。 本书的支持 我们会尽全力保证本书和随附网站的内容精确。如果有更正或更改,都会添加到微软公司的知识库文章中。 微软出版社在以下站点为本书提供支持: http://www.microsoft.com/leaming/supportYbooks 问题和意见 如果您对本书有什么意见、问题或想法,或者有通过访问以上网站都不能解决的问题,请通过电子邮件发送给微软出版社: mspinput驷icrosoft.com 或者通过邮件发到: Microsoft Press Attn:Microsoft SQL Server 2008 InternalsEditor OneMicrosoft Way Redmond,WA98052-6399 注意上述地址不提供微软软件的产品支持。 序言 创造像Microsoft SQL Server这样产品的开发人员通常都是某一技术方面(如访问方法或查询执行)的专家。他们一直在与这个产品打交道,深知自己扮演的角色,以至于陷入了“知识的泥潭”:他们虽然非常了解自己特定领域的细节,却很难通过描述他们的工作就能帮助客户有效地使用这款产品。 另一方面,根据产品创作图书的技术作家们会由外到内地运用产品。这些作家中的大部分人对他们所写产品了解得非常广,但是又有点浅,仅停留在表面。他们写出的书籍有价值,这些书通常插入许多截图,能帮助新用户或中级用户快速学习如何用该产品进行工作。 在知识内部和知识面之间有个空档,就是许多产品开发人员创造的好功能并没有被用户(尤其是中级和高级用户)充分发挥其全部潜力,这就是本书的切入点。正如那些早期的“揭秘SQL Server”系列,本书也是SQL Server如何工作的参考书。Kalen Delaney已经和SQL Server产品团队一起工作了10多年,和开发人员花了无数个小时来深入知识内部,再用一种令人难以置信的清晰形式阐述结果,使中级和高级用户可以充分使用SQLServer的功能。在本书中,Kalen,还有4位SQL Server专家共享了深入的内部知识。Conor Cunningham和Paul Randal具有多年的SQL Server产品开发经验,他们每个人都是资深技术专家,同时又是天才的演讲员。Kimberly Tfipp和Adam Machanic一起探讨事情的内部工作原理,然后将这些结果分享给其他人。在有关SQL Server的活动中,Kimberly和Adam都是座无虚席的演讲员。这个团队了解并整合SQL Server 2008的关键架构更改的详细状况,从而造就了这本新的综合性的SQL Server内部参考书。 您可以用立见分晓的试验来确定一本技术图书是否应当归为“不容置疑的参考书”这个类别。测试相对容易,但是对大家来说很难执行。非常简单,这个测试就是看有多少正在开发产品的开发人员的书架上有这本书并参考它。我敢保证Kalen创作的《Inside Microsoft SQL Server》的每个版本都能通过这项测试,本书也会通过这项测试。 Dave Campbell Microsoft SQL Server 狂热的技术追随者













- 粉丝: 151
- 资源: 187

我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助




- 1
- 2
- 3
- 4
- 5
前往页