词条 | Transact-SQL管理与开发实例精粹 |
释义 | 《Transact-SQL管理与开发实例精粹》将作者10余年从事SQL Server数据库管理和开发经验积累的Transact-SQL综合性实例整理归类并进行剖析。可以帮助读者借鉴和开发出适合自己的Transact-SQL实例,这些实例既可以用于数据库管理,也可以用于数据库系统开发。 图书信息书名:突出重围:Transact-SQL管理与开发实例精粹作者:赵松涛 等编著 ISBN:978-7-121-11447-2 出版日期:2010年10月 定价:59.00元 开本:16开 页码:460页 宣传语专业专注,独到独家,深度深入 内 容 简 介由于Transact-SQL语言良好的传承和继承性,因此,本书的绝大部分代码可以跨越SQL Server版本的限制,在SQL Server 2008、2005甚至2000上都可以使用,即使今后推出的新版本,几乎也不用修改就可以移植使用。本书涉及Transact-SQL使用的各个方面,但又不是联机丛书语法的简单复制,而是侧重于通过实例来学习综合使用Transact-SQL各语法要素完成特定任务的方法。 本书既适合数据库管理人员,也适合开发人员阅读和参考,还可作为大中专院校及各类培训班的教材,极具实用性。 前 言图书难做,技术类的图书越来越难做,因为网络已经让资料的搜索和盗版几乎没有成本,还缘于社会转型期的喧嚣和浮躁已经让人很难静下心来读书。在接连出版了几本叫好不叫座的数据库图书后,我几乎已经完全丧失了写作的勇气。是郭立主任和她领导的博文视点这个团体给了我勇气和力量,在历经3年的打磨和反复修改的基础上,才有了这本图书的问世。个中辛苦,唯有自知。 从SQL Server 6.5到SQL Server 2008,我一直在学习、研究并使用,10多年的过程中,对其了解和掌握也有一个逐步加深的过程。如果说有什么心得和体会的话,我的理解是Transact-SQL语言应该是SQL Server的核心和精髓,因为不论是管理和开发,最终落脚都是Transact-SQL语言的作用。遗憾的是,大部分学习SQL Server的人员都在简单掌握其图形化管理界面操作后,往往忽略对Transact-SQL的学习和了解。一方面是SQL Server的联机丛书已经做得足够仔细,另外一方面也是因为Transact-SQL的学习没有好的实例和代码可以借鉴。 最近几年,我逐步深入研究SQL Server的核心机制,在此基础上形成了自己的一些研究结论。这本图书就是将自己对Transact-SQL的了解和掌握,以及研究使用的实例代码呈现给读者,绝非对联机丛书的简单雷同使用。因此,本书可以称为是一名数据库技术爱好者的独家秘笈。 原创留口碑,专业出精品。无论是管理还是开发人员,我相信这本书都可以作为您的案头丛书。 踏实做人,用心做事,我相信付出总会有回报。您的批评、建议和反馈就是对我最大的回报。本书中涉及的所有实例源代码进行下载。 本书主要由赵松涛编写,参与编写的还有李翔鹰(第6、11、13章)、余艳、王恩春、赵迎春、赵高飞、卢颖、朱远妮、李黎明、彭兴文、杜从云、朱春凤、邓新华。 感谢郭立女士和她领导的博文视点这个年轻的、充满朝气的团队给予我充分的创作自由并提出了宝贵的意见。 献给所有我的读者家人、父母和读者。 作 者 目 录第1章 Transact-SQL语法元素 1 1.1 标识符 1 1.1.1 必须有标识符吗 1 1.1.2 标识符的排序规则 1 1.1.3 常规标识符 2 1.1.4 带分隔符的标识符 3 1.2 数据类型 3 1.2.1 哪些对象需要数据类型 3 1.2.2 如何选择恰当的数据类型 4 1.2.3 基本数据类型 5 1.2.4 SQL Server 2008新增数据类型 5 1.2.5 深入研究tinyint数据类型 6 1.2.6 深入研究smallint数据类型 8 1.2.7 深入研究int(Integer)数据类型 10 1.2.8 深入研究bigint数据类型 12 1.2.9 decimal(numeric)数据类型的使用 14 1.2.10 float数据类型的使用 16 1.2.11 real数据类型的使用 17 1.2.12 char数据类型的使用 17 1.2.13 varchar数据类型的使用 17 1.2.14 用CAST函数转换数据类型 18 1.2.15 用CONVERT函数转换数据类型 18 1.3 常量 19 1.3.1 数值型常量的格式 19 1.3.2 字符串型常量的格式 20 1.3.3 日期时间型常量的格式 20 1.4 注释 20 1.4.1 添加单行注释信息 20 1.4.2 添加多行注释信息 20 1.5 变量 21 1.5.1 变量的数据类型 21 1.5.2 变量的分类 21 1.5.3 局部变量的声明 21 1.5.4 局部变量的赋值 22 1.5.5 局部变量的作用域 23 1.6 常用聚合函数 23 1.6.1 计算平均值AVG 23 1.6.2 计算最小值MIN 24 1.6.3 计算最大值MAX 25 1.6.4 计算求和值SUM 26 1.6.5 计算项数值COUNT(COUNT_BIG) 26 1.6.6 计算标准偏差值STDEV 27 1.6.7 计算方差VAR 28 1.7 常用日期时间函数 29 1.7.1 获取当前日期GETDATE 29 1.7.2 获取年度信息YEAR 30 1.7.3 获取月份信息MONTH 30 1.7.4 获取天数信息DAY 30 1.7.5 任意获取日期时间值部分DATEPART 31 1.7.6 日期加法DATEADD 31 1.7.7 日期减法DATEDIFF 32 1.7.8 2008中新增的日期时间型函数 33 1.7.9 判断是否为日期数据ISDATE 33 1.8 常用字符串函数 33 1.8.1 获取字符的ASCII码ASCII 33 1.8.2 获取ASCII码对应的字符CHAR 34 1.8.3 获取字符的Unicode编码UNICODE 35 1.8.4 获取Unicode编码对应的字符NCHAR 36 1.8.5 获取字符串第一次出现位置PATINDEX 36 1.8.6 生成空格字符串SPACE 37 1.8.7 按指定次数重复生成字符串REPLICATE 38 1.8.8 截取子串SUBSTRING 39 1.8.9 获取字符串长度LEN 39 1.8.10 替换字符串中内容STUFF 40 1.8.11 指定位置搜索字符串中内容CHARINDEX 41 1.8.12 生成带分隔符的Unicode字符串QUOTENAME 42 1.8.13 转换浮点数字为字符串STR 42 1.8.14 截取左边字符串LEFT 43 1.8.15 截取右边字符串RIGHT 43 1.8.16 截取左边空格LTRIM 44 1.8.17 截取右边空格RTRIM 44 1.8.18 转换为小写字符串LOWER 45 1.8.19 转换为大写字符串UPPER 45 1.8.20 反序字符串REVERSE 46 1.8.21 获取字符串字节数DATALENGTH 46 1.9 常用文本和图像函数 47 1.9.1 查找特定字符串PATINDEX 47 1.9.2 获取文本指针TEXTPTR 47 1.9.3 检测文本指针是否有效TEXTVALID 49 1.9.4 读取文本图像列内容READTEXT 49 1.9.5 写入文本图像列内容WRITETEXT 50 1.9.6 更新文本图像列内容UPDATETEXT 51 1.10 常用数学函数 52 1.10.1 计算绝对值ABS 52 1.10.2 获取大于等于的最小整数值CEILING 53 1.10.3 获取小于等于的最大整数值FLOOR 53 1.10.4 获取随机数RAND 53 1.10.5 获取指定长度和精度ROUND 54 1.11 常用元数据函数 54 1.11.1 获取数据库标识符DB_ID 54 1.11.2 获取数据库名称DB_NAME 55 1.11.3 获取数据库属性值DATABASEPROPERTYEX 56 1.11.4 获取文件组标识符FILEGROUP_ID 57 1.11.5 获取文件组名称FILEGROUP_NAME 58 1.11.6 获取文件组属性值FILEGROUPPROPERTY 58 1.11.7 获取文件标识符FILE_ID 60 1.11.8 获取文件名称FILE_NAME 61 1.11.9 获取文件属性值FILEPROPERTY 62 1.11.10 获取数据对象标识符OBJECT_ID 63 1.11.11 获取数据对象名称OBJECT_NAME 64 1.11.12 获取文件属性值OBJECTPROPERTYEX 66 1.12 运算符 67 1.12.1 算术运算符 67 1.12.2 位运算符 68 1.12.3 比较运算符 68 1.12.4 逻辑运算符 68 1.12.5 字符串连接运算符 69 1.12.6 赋值运算符 69 1.12.7 运算符的优先级 69 第2章 Transact-SQL语句 70 2.1 控制流语句 70 2.1.1 程序块语句BEGIN..END 70 2.1.2 判断语句IF..ELSE 71 2.1.3 循环语句WHILE 72 2.1.4 分支判断语句CASE 74 2.1.5 无条件退出语句RETURN 75 2.1.6 无条件跳转语句GOTO 77 2.1.7 延期执行语句WAITFOR 78 2.2 运行时生成语句 79 2.2.1 用EXECUTE执行动态命令 80 2.2.2 用SP_EXECUTESQL执行动态命令 81 2.2.3 参数替换 83 2.2.4 为什么提倡使用SP_EXECUTESQL 84 2.2.5 使用输出参数的SP_EXECUTESQL 85 2.3 语句之间数据的传递 86 2.3.1 Transact-SQL语句之间数据的传递 86 2.3.2 Transact-SQL与高级语言之间数据的传递 87 2.4 错误处理 90 2.4.1 SQL Server数据库引擎错误 91 2.4.2 用TRY..CATCH发现错误 91 2.4.3 捕获错误的系统函数 92 2.4.4 用@@ERROR捕获上一条语句的错误 93 2.4.5 用RAISERROR反馈错误 94 2.5 批处理 96 2.5.1 GO的含义 96 2.5.2 研究批处理的执行 96 2.5.3 批处理的意义 99 2.5.4 为什么临时变量作用域不能跨批处理 100 2.5.5 如何编写批处理 101 2.5.6 批处理如何处理错误 101 2.5.7 脚本 102 第3章 查询服务器配置信息 103 3.1 配置查询环境 103 3.2 查询服务器属性值 104 3.2.1 ServerProperty系统函数 104 3.2.2 查询数据库引擎版本 105 3.2.3 综合使用ServerProperty函数查询 105 3.3 判断登录账户身份 106 3.4 读写注册表信息 106 3.4.1 读注册表xp_regenumvalues 107 3.4.2 读注册表xp_regread 107 3.4.3 写注册表xp_regwrite 108 3.4.4 删除注册表项xp_regdeletevalue 108 3.4.5 读注册表项xp_instance_regread 109 3.4.6 写注册表xp_instance_regwrite 109 3.4.7 读注册表中的主要数据文件路径信息 110 3.4.8 读注册表中的错误日志文件路径信息 111 3.4.9 读注册表中的日志文件路径信息 112 3.5 综合实例 113 3.5.1 获取“常规”选项卡信息 113 3.5.2 获取服务器配置参数信息 114 3.5.3 获取服务器上数据库信息 115 3.5.4 获取服务器上处理器数量 115 3.5.5 提升SQL Server服务器优先级 116 3.5.6 获得Windows版本信息 116 3.5.7 获得身份验证机制 117 3.5.8 获得登录审核机制 118 3.5.9 自动检测服务器重要的配置参数 118 3.5.10 查询服务器的用户或用户组 126 3.5.11 查询用户角色或应用程序角色 127 第4章 登录过程 129 4.1 连接 129 4.1.1 查询所有连接信息 129 4.1.2 查询连接总数 130 4.1.3 查询阻塞的连接 130 4.1.4 查询用户建立的连接 130 4.1.5 查询系统建立的连接 130 4.1.6 查询活动的用户连接 131 4.1.7 查询用户连接的不同客户机 131 4.2 配置 131 4.2.1 查询当前系统配置 131 4.2.2 查询当前最大工作线程数 132 4.3 会话 132 4.3.1 查询服务器上的所有会话 132 4.3.2 查询会话建立的游标 132 4.3.3 查询会话的错误信息 133 4.3.4 查询会话的缓冲区命中率 133 4.3.5 查询会话的操作系统线程 134 4.3.6 查询当前会话ID 135 4.4 综合运用 135 4.4.1 综合查询连接统计信息 135 4.4.2 判断当前登录的权限 137 4.4.3 查询会话超时设置 137 4.4.4 判断连接是否为DAC 138 4.4.5 查询当前连接的网络参数 138 4.4.6 查询SQL Server版本信息 139 4.4.7 查询服务器基本属性 139 4.4.8 查询当前登录名 141 4.4.9 查询当前的活动事务数 141 4.4.10 查询数据库缓冲区命中率低的会话 141 4.4.11 查询数据库缓冲区命中率最低的会话的SQL语句 142 第5章 数据库相关 144 5.1 查询数据库信息 144 5.1.1 查询所有的用户数据库名称 144 5.1.2 用sp_dboption存储过程配置数据库 145 5.1.3 配置数据库的恢复模式 145 5.1.4 判断数据库的名称是否含有特定字符 146 5.1.5 判断两个数据库的排序规则是否一致 147 5.1.6 判断数据库是否系统数据库和可读 148 5.1.7 查询可以访问的数据库 148 5.1.8 查询数据库的文件 149 5.1.9 查询数据库的系统表 150 5.1.10 查询数据库的排序规则 151 5.1.11 查询数据库的排序规则Windows代码 152 5.1.12 查询数据库支持的排序规则 152 5.1.13 统计数据库上的进程数 152 5.1.14 查询数据库的兼容性级别 153 5.1.15 查询数据库的最后备份时间 153 5.1.16 查询数据库的最后日志备份时间 153 5.2 数据库的存储空间 154 5.2.1 查询数据库的总空间 154 5.2.2 查询数据库的数据文件总空间 154 5.2.3 查询数据库的日志文件总空间 155 5.2.4 查询数据文件已经分配的空间 155 5.2.5 查询数据文件的可用空间 155 5.2.6 查询日志文件已经分配的空间 157 5.3 综合运用 159 5.3.1 查询数据库的属性 159 5.3.2 获取所有数据库的数据文件空间使用率排序 159 第6章 未公开的DBCC命令 162 6.1 DBCC PAGE查询数据页面 162 6.1.1 查询DBID和DBNAME 163 6.1.2 查询FILENUM和PAGENUM 163 6.1.3 DBCC PAGE的典型用法 163 6.2 DBCC LOG查询日志 164 6.3 DBCC ERRORLOG初始化错误日志 165 6.4 DBCC FLUSHPROCINDB清除缓存存储过程 166 6.5 DBCC BUFFER查询缓冲区 166 6.6 DBCC DBINFO显示数据库结构 167 6.7 DBCC DBTABLE显示数据字典 168 6.8 DBCC IND显示表的索引页面信息 168 6.9 DBCC PRTIPAGE显示索引每行的数据页 169 6.10 DBCC RESOURCE显示服务器资源情况 169 6.11 DBCC DBRECOVER恢复质疑数据库 170 6.12 DBCC CACHESTATS查看内存统计信息 170 6.13 DBCC MEMORYSTATUS查询内存分配 171 6.14 DBCC跟踪标记 171 6.14.1 概念 171 6.14.2 打开跟踪标记 172 6.14.3 关闭跟踪标记 172 6.14.4 查询跟踪标记状态 172 6.15 DBCC SHOWFILESTATS显示数据文件空间 172 6.16 WITH TABLERESULTS表格显示信息 173 6.17 DBCC LOGINFO查询虚拟日志信息 173 6.18 DBCC EXTENTINFO查询盘区数 174 第7章 数据和日志文件 176 7.1 FILEPROPERTY函数获得文件属性 176 7.1.1 判断文件是否只读 176 7.1.2 判断文件是否主要数据文件 177 7.1.3 查询文件已经使用空间 177 7.2 FN_VIRTUALFILESTATS获得文件I/O性能 177 7.2.1 查询指定文件的I/O性能 178 7.2.2 查询指定数据库所有文件的I/O性能 178 7.2.3 查询所有数据库所有文件的I/O性能 179 7.2.4 查询文件I/O性能的动态性能视图 180 7.3 日志文件相关 180 7.2.1 查询VLF分布情况 180 7.2.2 移动日志文件的内容 182 7.2.3 删除日志文件的内容 182 7.4 数据文件相关 183 7.4.1 查询所有数据库的数据文件空间情况 183 7.4.2 查询数据库存储空间的详细分布 185 7.4.3 查询已分配空间中的行内数据 192 7.4.4 查询已分配空间中的LOB大型数据 193 7.4.5 查询已分配空间中的行溢出数据 194 7.4.6 查询哪些类型的对象使用了数据空间 194 7.4.7 查询使用数据空间的对象类型及其数量 194 7.5 综合查询数据库文件的I/O性能 195 第8章 数据对象 197 8.1 索引 197 8.1.1 更新表上所有索引的统计信息 197 8.1.2 更新表上特定索引的统计信息 199 8.1.3 统计数据库中索引使用的空间总和 200 8.1.4 索引使用的空间详细情况 203 8.2 表 208 8.2.1 获得数据库表的存储空间分布 208 8.2.2 获得数据缓冲区中数据对象的存储分布 212 第9章 性能监控 218 9.1 对象分配性能 218 9.1.1 监控盘区分配情况 218 9.1.2 监控盘区回收情况 219 9.1.3 监控页面拆分情况 220 9.1.4 监控表上锁升级情况 221 9.2 内存性能 222 9.2.1 SQL Server内存详解 223 9.2.2 查询SQL Server服务器使用的内存数量 225 9.2.3 查询连接使用的内存数量 225 9.2.4 查询锁使用的内存数量 226 9.2.5 查询优化器使用的内存数量 226 9.2.6 查询SQL使用的内存数量 226 9.2.7 查询服务器能够使用的最大内存数量 227 9.2.8 查询当前服务器上可用内存数量 227 9.2.9 查询最小服务器内存 228 9.2.10 查询最大服务器内存 228 9.2.11 查询计算机的物理内存 229 9.2.12 查询计算机的虚拟内存 229 9.3 过程缓冲区性能 229 9.3.1 查询过程缓冲区使用的内存 229 9.3.2 查询过程缓冲区内容类别 230 9.3.3 查询过程缓冲区命中率 230 9.3.4 查询过程缓冲区对象分布比例 231 9.3.5 查询过程缓冲区中各类对象的命中率 232 9.3.6 查询过程缓冲区各类对象使用的比例 232 9.3.7 清除过程缓冲区中的对象 233 9.3.8 过程缓冲区中消耗资源Top对象 234 9.4 数据缓冲区性能 238 9.4.1 查询数据缓冲区的内存数量 238 9.4.2 查询数据缓冲区的理想内存数量 239 9.4.3 查询数据缓冲区的可用内存数量 239 9.4.4 查询数据缓冲区中数据使用的内存 239 9.4.5 查询数据缓冲区的命中率 240 9.4.6 清除数据缓冲区中的对象 240 9.4.7 数据缓冲区中消耗资源Top对象 241 9.5 其他实例 242 9.5.1 查询资源等待情况 242 9.5.2 查询计数器种类和性能值 243 9.5.3 查询执行计划的属性 244 9.5.4 查询性能计数器表是否可以使用 245 9.5.5 查询服务器内存总体分布情况 245 第10章 管理其他实例 250 10.1 检测和使用XP_CMDSHELL 250 10.1.1 检测XP_CMDSHELL是否启用 250 10.1.2 用XP_CMDSHELL执行命令 253 10.2 错误日志 253 10.2.1 产生并使用新的错误日志文件 253 10.2.2 获得错误日志文件的信息 254 10.3 代理服务 254 10.3.1 判断代理服务是否启动 254 10.3.2 查询代理服务上产生的警报 254 10.3.3 配置代理服务自启动 255 10.3.4 判断代理服务是否允许访问 255 10.3.5 获得代理服务启动信息 256 10.3.6 记录代理服务启动时间 256 10.3.7 获得代理服务子系统的信息 256 10.3.8 获得代理服务详细配置信息 256 10.3.9 运行代理服务监视器 258 10.3.10 刷新代理服务作业 258 10.3.11 查询代理服务活动作业 259 10.4 设置登录环境 259 10.5 数据库 260 10.5.1 产生数据库检查点 260 10.5.2 设置数据库单用户模式 260 10.5.3 分离数据库 260 10.5.4 附加数据库 260 10.5.5 判断指定路径的日志文件是否存在 261 10.5.6 获取主要数据文件中的文件信息 261 10.5.7 获取主要数据文件中的数据库信息 262 10.5.8 获取数据库的用户表信息 263 10.5.9 脱机数据库 264 10.5.10 联机数据库 264 10.5.11 收缩数据库 264 10.5.12 判断用户是否可以访问master数据库 264 10.6 访问注册表 265 10.7 读取硬盘空间信息 266 10.8 判断文件是否存在 266 10.9 存储空间的碎片 266 10.9.1 数据的存储类型 267 10.9.2 数据的存储结构 270 10.9.3 存储空间的碎片类型 270 10.9.4 碎片对数据操作性能的影响 271 10.9.5 dbcc showcontig检测碎片 272 10.9.6 dm_db_index_physical_stats检测碎片 274 10.9.7 消除碎片的方法 277 10.9.8 自动检测当前数据库的碎片 278 10.9.9 自动消除数据库的碎片 283 第11章 数据查询 288 11.1 语法结构 288 11.2 选择列表 289 11.2.1 选择所有列 289 11.2.2 选择特定列 293 11.2.3 包含运算符的查询 295 11.2.4 包含函数的查询 296 11.2.5 消除重复项 297 11.3 FROM子句 298 11.3.1 使用表别名 298 11.3.2 使用表提示 301 11.4 WHERE子句 305 11.4.1 WHERE子句中的运算符 306 11.4.2 比较查询 307 11.4.3 范围查询 308 11.4.4 列表查询 309 11.4.5 模式匹配查询 310 11.5 GROUP BY子句 312 11.5.1 语法结构 312 11.5.2 实例分析 313 11.6 ORDER BY子句 314 11.6.1 语法结构 314 11.6.2 实例分析 315 11.7 HAVING筛选查询 316 11.7.1 HAVING筛选查询的语法结构 316 11.7.2 HAVING筛选查询实例 316 11.8 INTO查询 316 11.8.1 INTO查询的语法结构 316 11.8.2 INTO查询实例 317 11.9 SELECT联结查询 317 11.9.1 SELECT联结查询的语法结构 317 11.9.2 SELECT联结查询的分类 317 11.9.3 笛卡儿积查询 318 11.9.4 等值联结查询 318 11.9.5 自然联结查询 318 11.9.6 自身联结查询 318 11.9.7 内联结查询 319 11.9.8 左外联结查询 319 11.9.9 右外联结查询 320 11.9.10 全外联结查询 320 11.10 SELECT嵌套查询 320 11.10.1 什么是SELECT嵌套查询 320 11.10.2 什么是SELECT嵌套子查询 321 11.10.3 简单嵌套查询 321 11.10.4 in嵌套查询 322 11.10.5 some嵌套查询 322 11.10.6 all嵌套查询 323 11.10.7 exists嵌套查询 324 11.11 操作结果集 324 11.11.1 Union形成并集 324 11.11.2 Except形成差集 325 11.11.3 InterSect形成交集 326 11.11.4 用公用表表达式临时存储结果集 326 第12章 数据操作 328 12.1 INSERT语句研究 328 12.1.1 表结构和索引结构 328 12.1.2 执行前的日志情况分析 329 12.1.3 执行情况分析 329 12.1.4 执行后的日志情况分析 331 12.1.5 研究数据的变化情况 332 12.1.6 研究结论 333 12.2 UPDATE语句研究 334 12.2.1 执行前的日志情况分析 334 12.2.2 执行情况分析 334 12.2.3 执行后的日志情况 335 12.2.4 研究结论 338 12.3 DELETE语句研究 338 12.3.1 执行前的日志情况分析 338 12.3.2 执行情况分析 339 12.3.3 执行后的日志情况 339 12.3.4 研究结论 341 12.4 深入探讨语句内部机制 341 12.4.1 谁先插入数据 342 12.4.2 谁先更新数据 342 12.4.3 谁先删除数据 342 第13章 T-SQL游标 343 13.1 游标概述 343 13.1.1 什么是游标 343 13.1.2 游标的类型 344 13.1.3 默认结果集是如何使用的 344 13.1.4 什么是MARS 345 13.1.5 使用游标还是默认结果集 345 13.1.6 使用服务器游标还是客户机游标 346 13.2 T-SQL游标定义及使用 346 13.2.1 T-SQL游标的生命周期 346 13.2.2 T-SQL游标的声明 347 13.2.3 T-SQL游标的打开 347 13.2.4 T-SQL游标的读取 348 13.2.5 T-SQL游标的关闭 348 13.2.6 T-SQL游标的释放 349 13.2.7 T-SQL游标的综合实例 349 第14章 事务和锁 351 14.1 多用户数据库的并发问题 351 14.1.1 并发访问的实例 351 14.1.2 并发问题 352 14.2 事务 353 14.2.1 事务的特性 353 14.2.2 事务的状态 354 14.3 SQL SERVER中的事务机制 355 14.3.1 事务模式 355 14.3.2 更改事务模式 356 14.3.3 事务的启动 357 14.3.4 事务日志记录 357 14.3.5 事务编程语句 357 14.3.6 事务的调度 358 14.3.7 事务的隔离性级别 358 14.3.8 批(GO) 359 14.4 锁 360 14.4.1 锁的粒度 360 14.4.2 锁的类型(模式) 361 14.4.3 锁持有度 361 14.4.4 动态锁机制 362 14.4.5 查看锁 362 14.5 死锁 363 14.5.1 死锁的发生 364 14.5.2 消除死锁的方法 364 14.5.3 SQL Server 死锁检测和结束机制 365 14.5.4 跟踪和检测死锁 365 第15章 存储过程 367 15.1 存储过程概述 367 15.1.1 从批处理谈起 367 15.1.2 存储过程的引入 368 15.1.3 存储过程是什么 369 15.1.4 可不可以不使用存储过程 370 15.1.5 存储过程的优点 370 15.1.6 T-SQL的注入式攻击与防范 371 15.1.7 用参数化的存储过程防范T-SQL的注入式攻击 372 15.2 存储过程的类型 373 15.2.1 按照定义主体分类 374 15.2.2 按照生命周期分类 374 15.3 T-SQL存储过程的创建 374 15.3.1 创建T-SQL存储过程的规则 374 15.3.2 创建T-SQL存储过程的语法 375 15.3.3 创建无参数T-SQL存储过程 376 15.3.4 创建带输入参数的T-SQL存储过程 377 15.3.5 创建带输出参数的T-SQL存储过程 377 15.4 T-SQL存储过程的执行 378 15.4.1 执行无参数的T-SQL存储过程 379 15.4.2 执行带输入参数的T-SQL存储过程 379 15.4.3 执行带输出参数的T-SQL存储过程 379 15.5 数据操作T-SQL存储过程 380 15.5.1 数据查询 380 15.5.2 数据录入 381 15.5.3 数据删除 381 15.5.4 数据统计和求和 382 15.5.5 数据更新 383 15.5.6 将图像数据存入数据库 385 15.6 数据库操作T-SQL存储过程 387 15.6.1 附加数据库 387 15.6.2 完全备份数据库 387 15.6.3 收缩数据库 388 15.6.4 检查数据库备份 388 15.6.5 删除数据库 389 15.6.6 创建数据库 390 15.7 表操作T-SQL存储过程 391 15.7.1 清除所有表的内容 391 15.7.2 根据需要对表的内容进行处理 391 15.7.3 统计表数据 393 15.7.4 导出表数据为文件 393 15.7.5 导出数据库中特定的表数据为文件 395 15.7.6 导入文本文件到表中 396 15.8 文件操作T-SQL存储过程 397 15.8.1 创建操作系统目录 397 15.8.2 删除操作系统文件 397 15.8.3 判断文件是否存在 398 15.8.4 获得服务器名称 398 15.8.5 统计特定字符串出现的次数 399 15.9 异构数据操作T-SQL存储过程 400 15.9.1 提取Foxpro数据到SQL Server 400 15.9.2 提取Access数据到SQL Server 401 第16章 自定义函数和触发器 402 16.1 自定义函数概述 402 16.1.1 什么是自定义函数 402 16.1.2 自定义函数的优点 404 16.1.3 T-SQL自定义函数的语法 405 16.2 T-SQL自定义函数实例 407 16.2.1 转换Bool型到字符型 407 16.2.2 转换不同的日期表达 407 16.2.3 转换字符串到日期 408 16.3 触发器概述 408 16.3.1 触发器类型 409 16.3.2 触发器的内部实现机制 409 16.3.3 触发器工作原理 409 16.3.4 触发器的使用 410 16.3.5 触发器的创建语法 410 16.4 T-SQL触发器实例 411 16.4.1 自动记录数据库DDL事件的触发器 411 16.4.2 自动更新表数据的触发器 412 16.4.3 不允许删除表数据的触发器 413 16.4.4 不允许某些插入表数据的触发器 413 16.4.5 表上发生更新操作后级联更新其他表的触发器 414 第17章 某项目数据库T-SQL开发实例 416 17.1 特殊的表设计 416 17.1.1 数据库设计历史表DBBuildVersion 416 17.1.2 数据库DDL语句执行情况表DatabaseLog 418 17.1.3 数据库错误信息情况表ErrorLog 419 17.2 特殊的表字段设计 421 17.3 存储过程设计 423 17.3.1 记录数据库错误信息 423 17.3.2 显示数据库错误信息 424 17.3.3 返回服务器时间 425 17.3.4 根据需要备份数据库 425 17.3.5 录入图书数据 428 17.3.6 更新图书数据 430 17.3.7 检索图书数据 431 17.3.8 删除图书数据 431 17.4 触发器设计 432 17.4.1 自动更新表的ModifiedDate字段 432 17.4.2 自动记录数据库DDL语句 433 17.5 自定义函数设计 434 17.5.1 获得两个日期之间的年份数 434 17.5.2 获得图书的折扣价 435 17.5.3 获得价格区间的图书信息 435 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。