本书全面系统地介绍了SQL Server开发和管理的应用技术,包括安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server应用疑难解答等内容。\r\n 本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,多角度地引导读者学习相关知识。书中针对各类问题,提供了详细的操作步骤和解决思路,具有很强的实用性和可操作性。
第 1 章 安装和配置SQL Server 1\r\n1.1 SQL Server的版本和版本选择 1\r\n1.2 安装SQL Server的常见问题 3\r\n1.3 如何理解实例 5\r\n1.4 如何实现无值守安装 5\r\n1.5 Desktop Engine 9\r\n1.5.1 MSDE 2000概述 9\r\n1.5.2 获取MSDE 2000 9\r\n1.5.3 安装MSDE 2000 10\r\n1.5.4 管理MSDE 2000 11\r\n1.5.5 支持的并发用户数和数据库容量 12\r\n1.6 SQL Server Service Pack 12\r\n1.6.1 确定已安装SQL Server的版本 12\r\n1.6.2 SQL Server Service Pack 4介绍 13\r\n1.6.3 SQL Server Service Pack 4的内容 13\r\n1.6.4 安装SQL Server Service Pack 4的常见问题 14\r\n1.7 SQL Server服务 15\r\n1.8 服务账户 15\r\n1.9 影响SQL Server运行的设置 18\r\n1.9.1 内存配置 18\r\n1.9.2 数据存储 20\r\n\r\n第 2 章 日期处理 23\r\n2.1 日期类型概述 23\r\n2.2 日期处理函数 25\r\n2.2.1 日期增减函数 25\r\n2.2.2 日期信息获取函数 26\r\n2.2.3 日期差值计算函数 27\r\n2.2.4 其他日期处理相关函数 27\r\n2.3 日期选项设置 29\r\n2.3.1 default language选项 30\r\n2.3.2 SET DATEFIRST 31\r\n2.3.3 SET DATEFORMAT 31\r\n2.3.4 SET LANGUAGE 33\r\n2.4 日期格式化与日期推算处理 34\r\n2.4.1 日期格式化处理 34\r\n2.4.2 日期推算处理 35\r\n2.4.3 日期加减处理 38\r\n2.5 日期处理实例 40\r\n2.5.1 生日处理 40\r\n2.5.2 生成日期列表 42\r\n2.5.3 工作日处理 46\r\n2.5.4 工作时间计算 49\r\n2.6 日期处理疑难解答 51\r\n2.6.1 日期处理中常犯的错误 51\r\n2.6.2 常见的低效率日期处理方法 52\r\n2.6.3 日期与数字 53\r\n\r\n第 3 章 字符处理 55\r\n3.1 字符类型概述 55\r\n3.2 字符串分拆 56\r\n3.2.1 循环截取法 57\r\n3.2.2 动态Transact-SQL语句法 57\r\n3.2.3 辅助表法 59\r\n3.2.4 分拆数据到列 61\r\n3.2.5 分拆数字数据 62\r\n3.2.6 分拆短信数据 63\r\n3.3 字符串合并 64\r\n3.3.1 游标合并法 65\r\n3.3.2 SELECT语句合并法 66\r\n3.3.3 临时表合并法 68\r\n3.3.4 固定行合并法 69\r\n3.4 其他字符串处理要求 70\r\n3.4.1 分段截取 70\r\n3.4.2 分段更新 72\r\n3.4.3 IP地址处理 72\r\n3.5 字符串分拆与合并处理应用实例 74\r\n3.5.1 字符串比较 74\r\n3.5.2 字符串交集/并集 75\r\n3.5.3 分拆字符串并统计 78\r\n3.5.4 借用字符串实现无规律排序 82\r\n3.5.5 列车车次查询 82\r\n3.6 字符串在动态Transact-SQL语句中的应用 85\r\n3.6.1 动态Transact-SQL语句概述 85\r\n3.6.2 字符串在编号查询中的使用 87\r\n3.6.3 动态参数存储过程 90\r\n3.6.4 动态Transact-SQL语句中常见问题 92\r\n3.7 text与ntext字段处理 96\r\n3.7.1 text与ntext数据的存储 96\r\n3.7.2 管理text与ntext数据 97\r\n3.7.3 text与ntext字段的复制和合并 99\r\n3.7.4 text与image字段转换 101\r\n3.7.5 ntext字段的REPLACE处理 103\r\n\r\n第 4 章 排序规则 107\r\n4.1 字符存储编码与排序规则 107\r\n4.1.1 字符数据的存储编码 107\r\n4.1.2 UNICODE 108\r\n4.1.3 排序规则 109\r\n4.1.4 排序规则比较和排列规则 111\r\n4.1.5 使用排序规则 112\r\n4.1.6 如何选择字符字段类型 116\r\n4.2 排序规则应用 117\r\n4.2.1 拼音处理 117\r\n4.2.2 全角与半角字符处理 120\r\n\r\n第 5 章 编号处理 123\r\n5.1 自动编号 123\r\n5.1.1 IDENTITY 123\r\n5.1.2 ROWGUIDCOL 129\r\n5.2 手工编号 131\r\n5.2.1 查表法 131\r\n5.2.2 独立编号表法 135\r\n5.2.3 随机编号 139\r\n5.3 缺号与补号 143\r\n5.3.1 检查缺号 143\r\n5.3.2 补号处理 143\r\n5.3.3 编号重排 146\r\n5.4 编号查询 150\r\n5.4.1 已用编号分布查询 150\r\n5.4.2 缺号分布查询 151\r\n5.4.3 生成已用编号和缺号分布字符串 152\r\n5.4.4 缺勤天数统计 155\r\n\r\n第 6 章 数据统计与汇总 159\r\n6.1 基本查询 159\r\n6.1.1 空(NULL)值对查询的影响 159\r\n6.1.2 联接 161\r\n6.1.3 UNION与UNION ALL 165\r\n6.1.4 数据填充查询 167\r\n6.1.5 上限与下限区间统计 169\r\n6.1.6 随机记录查询 170\r\n6.2 分级汇总 173\r\n6.2.1 实现分级汇总处理 173\r\n6.2.2 分级汇总结果的过滤 176\r\n6.2.3 分级汇总结果显示格式处理 177\r\n6.2.4 分级汇总结果的排序处理 179\r\n6.3 交叉数据报表 181\r\n6.3.1 实现原理 181\r\n6.3.2 多列转置 184\r\n6.3.3 动态列 185\r\n6.3.4 动态列中的字符溢出处理 188\r\n6.3.5 特殊的交叉报表 191\r\n6.4 典型数据统计案例 193\r\n6.4.1 库存明细账查询 193\r\n6.4.2 同期及上期数据对比 197\r\n6.4.3 动态分组统计 199\r\n6.4.4 销售排行榜 200\r\n\r\n第 7 章 分页处理 205\r\n7.1 应用程序中的分页处理 205\r\n7.2 数据库中的分页处理 207\r\n7.2.1 使用TOP N实现分页 207\r\n7.2.2 使用字符串 211\r\n7.2.3 使用临时表 213\r\n7.2.4 使用SQL Server的系统存储过程处理分页 216\r\n7.3 特殊要求的分页处理 217\r\n7.3.1 随机显示的分页处理 217\r\n7.3.2 分类数据的分页处理 221\r\n\r\n第 8 章 树形数据处理 223\r\n8.1 单编号处理法 223\r\n8.1.1 方法概述 223\r\n8.1.2 逐级汇总 225\r\n8.1.3 编码重排 226\r\n8.1.4 调整编码规则 229\r\n8.1.5 调整编码隶属关系 233\r\n8.2 双编号处理法 238\r\n8.2.1 方法概述 239\r\n8.2.2 树形数据排序 240\r\n8.2.3 查找子节点 244\r\n8.2.4 查找父节点 245\r\n8.2.5 编码校验 246\r\n8.2.6 节点复制 249\r\n8.2.7 节点删除 251\r\n8.2.8 逐级汇总 253\r\n8.3 树形数据的扩展形式 256\r\n8.3.1 产品配件清单 256\r\n8.3.2 公交车乘车线路查询 258\r\n\r\n第 9 章 数据导入与导出 261\r\n9.1 访问外部数据 261\r\n9.1.1 链接服务器 261\r\n9.1.2 OPENROWSET与OPENDATASOURCE 268\r\n9.1.3 外部数据访问方法总结 270\r\n9.2 文本文件的导入与导出 274\r\n9.2.1 查询文本文件内容 274\r\n9.2.2 BCP与BULK INSERT 277\r\n9.3 导入与导出中的常见问题 285\r\n9.3.1 访问外部数据的注意事项 285\r\n9.3.2 使用BCP或者BULK INSERT时的注意事项 286\r\n9.3.3 外部数据文件位置及文件访问权限问题 287\r\n9.4 在客户端实现SQL Server数据导入与导出处理 288\r\n9.4.1 在Access数据库中实现与SQL Server之间的数据交换 288\r\n9.4.2 实现客户端其他OLE DB数据源与SQL Server之间的数据交换 289\r\n9.4.3 在客户端实现SQL Server数据导入与导出处理的一些说明 289\r\n9.5 在数据库中存取文件 290\r\n9.5.1 SQL Server中的文件存取方法 290\r\n9.5.2 程序中的文件存取处理方法 292\r\n\r\n第 10 章 作业 295\r\n10.1 作业概述 295\r\n10.1.1 定义作业 295\r\n10.1.2 使用系统存储过程定义作业的常用模板 300\r\n10.2 作业的应用 303\r\n10.2.1 定时启用(或者停用)数据库 303\r\n10.2.2 执行耗时的存储过程 304\r\n10.2.3 秒级作业 305\r\n10.3 使用作业的疑难解答 309\r\n\r\n第 11 章 数据备份与还原 315\r\n11.1 数据库备份与还原方法介绍 315\r\n11.1.1 完全备份与还原 315\r\n11.1.2 差异备份与还原 317\r\n11.1.3 日志备份与还原 319\r\n11.1.4 数据文件或文件组备份与还原 320\r\n11.1.5 备份设备 321\r\n11.1.6 数据库恢复模型对数据库备份和还原的影响 322\r\n11.2 制订数据库备份方案 326\r\n11.2.1 备份方案制订原则 326\r\n11.2.2 建立数据备份方案 327\r\n11.3 数据库备份与还原的实践应用 332\r\n11.3.1 系统数据库的备份与还原 332\r\n11.3.2 数据库迁移 336\r\n11.3.3 部分数据库还原 339\r\n11.3.4 抢救损坏数据库中的数据 341\r\n11.3.5 将数据还原到指定时间点 343\r\n11.3.6 将数据还原到指定标记点 345\r\n11.3.7 同步备用服务器 346\r\n11.4 数据备份与还原疑难解答 349\r\n11.4.1 数据备份与还原中的常见问题 349\r\n11.4.2 使用媒体集备份时的常见问题 354\r\n11.4.3 数据库还原中的孤立用户问题 356\r\n11.4.4 查询备份文件中的信息 360\r\n\r\n第 12 章 用户定义数据类型 361\r\n12.1 用户定义数据类型概述 361\r\n12.1.1 创建和删除用户定义数据类型 361\r\n12.1.2 为用户定义的数据类型绑定规则 365\r\n12.1.3 为用户定义的数据类型绑定默认值 370\r\n12.2 修改用户定义数据类型 373\r\n12.2.1 修改被表引用的用户定义数据类型 373\r\n12.2.2 修改被存储过程引用的用户定义数据类型 379\r\n\r\n第 13 章 数据库安全 383\r\n13.1 SQL Server的存取构架 383\r\n13.1.1 表格格式数据流(TDS) 383\r\n13.1.2 Net-Library与网络协议 384\r\n13.1.3 Net-Library加密 387\r\n13.2 用户管理 388\r\n13.2.1 身份验证模式 388\r\n13.2.2 登录、用户、角色和组 390\r\n13.2.3 管理用户 395\r\n13.3 数据文件安全 403\r\n13.4 SQL Server安全配置 405\r\n13.4.1 安全配置建议 405\r\n13.4.2 使用安全套接字层(SSL)加密 408\r\n13.5 应用程序上的安全 417\r\n13.5.1 防止SQL注入式攻击 417\r\n13.5.2 限制应用程序访问 418\r\n13.5.3 不安全的扩展存储过程 419\r\n\r\n第 14 章 系统表应用实例 423\r\n14.1 系统对象概述 423\r\n14.1.1 每个数据库中都存在的系统表 424\r\n14.1.2 仅在系统数据库中存在的系统表 424\r\n14.1.3 系统表应用中三个重要的系统存储过程 426\r\n14.2 系统表在对象信息检索中的应用 429\r\n14.2.1 搜索指定的对象所处的数据库 429\r\n14.2.2 获取存储过程参数定义 432\r\n14.2.3 搜索指定字符在哪个表的哪个字段中 435\r\n14.2.4 非UNICODE字段改为UNICODE字段的可行性查询 438\r\n14.2.5 字段相关对象查询 439\r\n14.2.6 生成数据库字典 443\r\n14.3 系统对象在处理中的应用 444\r\n14.3.1 批量处理数据库中的对象 444\r\n14.3.2 将所有的char、varchar改为nchar、nvarchar 445\r\n14.3.3 标识列与普通列的相互转换 447\r\n14.3.4 把列添加指定位置 450\r\n14.3.5 在两个SQL Server数据库之间复制对象 451\r\n\r\n第 15 章 SQL Server应用疑难解答 455\r\n15.1 访问SQL Server实例的常见问题 455\r\n15.1.1 连接失败 455\r\n15.1.2 用户登录失败 458\r\n15.1.3 测试连接到SQL Server实例的方法总结 458\r\n15.1.4 超时 459\r\n15.1.5 单用户的问题 460\r\n15.1.6 默认数据库问题 461\r\n15.2 索引中的疑难解答 462\r\n15.2.1 索引对查询条件的影响 462\r\n15.2.2 索引对查询结果顺序的影响 465\r\n15.2.3 索引对数据操作的影响 469\r\n15.3 数据库日志疑难解答 470\r\n15.3.1 影响日志文件增长的因素 471\r\n15.3.2 从事务日志中删除日志记录 472\r\n15.3.3 日志文件处理中的误区 472\r\n15.3.4 合理解决日志文件增长 473\r\n15.4 错误处理疑难解答 474\r\n15.4.1 错误处理概述 474\r\n15.4.2 错误处理严重程度 475\r\n15.4.3 使用@@ERROR的疑难解答 476\r\n15.4.4 XACT_ABORT与RAISERROR的疑难解答 477\r\n15.5 游标处理疑难解答 479\r\n15.5.1 全局游标与本地游标 479\r\n15.5.2 检查指定的游标是否存在 480\r\n15.5.3 事务提交或者回滚对游标的影响 482\r\n15.5.4 可更新的游标 483\r\n15.6 SQL Server处理中的其他疑难解答 484\r\n15.6.1 并发工作负荷调控器 484\r\n15.6.2 存储过程中的疑难解答 486\r\n15.6.3 标识值疑难解答 488\r\n15.6.4 全文检索疑难解答 491\r\n15.6.5 发布与订阅中的常见问题 494\r\n15.6.6 其他疑难解答 496
邹建,网名zjcxc,CSDN eMag MS SQL Server电子杂志主编,CSDN社区MS SQL Server版大版主。2003.11~2004.02连续4次获得“微软社区之星”称号,2004年9月当选Microsoft Most Valuable Professional(MVP,微软最有价值专家)。熟悉数据库技术,对MS SQL Server数据库体系结构、备份恢复、设计、管理、性能优化等都有深入研究,项目经验丰富,擅长SQL Server数据库设计、管理及性能优化。
关于本书
SQL Server是Microsoft公司推出的一个关系数据库管理系统,是目前应用最广泛的数据库系统之一。
易学易用是SQL Server的一大特点,它为初学者提供了友好的用户界面──企业管理器(Enterprise Manager),使得一些复杂的操作也因为有了操作向导的帮助而变得简单。一般来说,用户在掌握了一些SQL Server的基础知识后,再通过一些实际操作,就可以很快地胜任一些基于SQL Server的开发和管理工作。
然而,入门容易学精难。相信很多学习SQL Server的人都会经历下面这个阶段:经过一段时间的学习,当我们自认为已经会熟练地操作SQL Server,并且能熟练地使用Transact-SQL语句时,再到各个数据库论坛中去看看网友们提出的实际问题时,就会发觉,好像很多问题都会一点,但不能完全解决,或者不能充分考虑到处理这个问题需要涉及的各个方面。而看别人回复的解决方法,基本上都能看懂,但自己写出来就比较困难,有时也难以理解别人为什么会用这样的方法去解决问题。这个阶段说明我们已经掌握了SQL Server的基础知识,也能利用SQL Server来完成一些工作,但还是缺少实践经验,无法把所学的知识真正融会贯通。
根据以前在SQL Server数据库开发和管理方面的工作经验,再加上有一些朋友和网友的支持和建议,我萌发了编写这样一本书的想法。所幸的是,几经努力,这个想法变成了现实。本书总结了我在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还包括了我几年来在CSDN SQL Server版所解决的数千个问题。希望这本书,能够帮助读者很好地将所学的数据库知识融于实践,并将SQL Server应用水平提高到一个新的层次。同时也希望读者能够通过本书的学习,充分发挥数据库在数据管理和处理方面的强大功能,而不要停留在把数据库当作数据存储仓库的使用阶段。
本书结构
本书分为15章,主要包括数据库开发与管理两方面的内容,其中开发部分的内容占到70%以上,覆盖了日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、用户定义数据类型等主题。而管理部分的内容主要体现在第1章、第10章、第11章、第13章、第14章和第15章,包括作业、数据备份与还原、数据库安全、系统表应用实例、SQL Server应用疑难解答(也有部分开发内容)等主题。
本书的读者对象
本书适于已经掌握了SQL Server基础知识,但还缺少实践经验的读者,对初学者而言也是一本很好的入门与进阶的向导。本书涉及SQL Server数据库的管理和应用开发两方面的内容,所以既适合程序员又适合数据库管理员。
本书声明
1.本书包括的所有源代码可以到http://www.ucbook.com/download/SQLServer2000.zip进行下载,解压缩密码为sqlserver2000。
2.除特别说明外,本书中的操作系统指Windows 2000,数据库指SQL Server 2000,未特别指明的SQL Server视为SQL Server 2000。
3.虽然SQL Server为初学者和数据库管理员(DBA)提供了企业管理器这个友好的图形管理界面,使用户不用学习太多的Transact-SQL语句,就能完成数据库的配置管理和日常使用。然而,企业管理器只是提供了一个把用户处理要求转换成处理Transact-SQL语句的图形化工具,最终完成用户服务处理要求的,还是Transact-SQL语句。所以要学好SQL Server,最终还是要学好Transact-SQL语句,鉴于此,本书对于各种问题(包括配置管理)的解决方法,都将以Transact-SQL语句为主。
4.广大读者如有好的建议或在学习本书中遇到疑难问题,欢迎到CSDN社区的SQL Server版(http://community.csdn.net/expert/forum.asp)进行探讨,也可发电子邮件联系我(zjcxc@21cn.com)或本书责任编辑(dujie@ptpress.com.cn),希望和大家一起学习和交流。
感 谢
我自己在SQL Server技术水平方面的提升主要是受益于CSDN社区的SQL Server版,本书的出现也得益于此。写书的最初想法,也是缘于许多网友的提议,大家对书的编写思路和内容结构进行了大量的讨论,并提出了许多有价值的看法,在此深表感谢。
同时要感谢陈小春等人在本书编写过程中所付出的心血和努力,他们在搭建实验环境、整理数据、排版方面为我分担了许多压力。