精华版序 1
译者序 1
作者简介 1
感谢 1
第1章 理解SQL基本知识并创建数据库文件 1
技巧1 理解数据库的定义 1
技巧2 理解平面文件 1
目录 1
技巧3 理解关系数据库模型 2
技巧4 理解Codd的12条关系数据库定义规则 3
技巧5 理解表 4
技巧6 理解表名 6
技巧7 理解列名 6
技巧8 理解视图 8
技巧9 理解架构 10
技巧11 理解约束 13
技巧10 理解域 13
技巧12 理解数据定义语言(DDL) 14
技巧13 理解数据操纵语言(DML) 17
技巧14 理解数据控制语言(DCL) 18
技巧15 理解标准SQL的日期时间数据类型和DATETIME数据类型 19
技巧16 理解SQL的BIT数据类型 21
技巧17 理解MS-SQL Server的IDENTITY属性 22
技巧18 理解断言(Assertions) 23
技巧19 理解SQL DBMS的客户/服务器模型 24
技巧20 理解SQL语句的结构 25
技巧21 使用MS-SQL Server Query Analyzer执行SQL语句 28
技巧22 使用MS-SQL Server ISQL在命令行上执行SQL语句或是执行存储在ASCII文件中的语句 30
技巧23 在ISQL内使用ED命令编辑SQL语句 32
技巧24 使用CREATE DATABASE语句创建MS-SQL Server数据库和事务处理日志 34
技巧25 使用MS-SQL Server Enterprise Manager创建数据库和事务处理日志 36
技巧27 理解如何确定MS-SQL Server数据库及其事务处理日志的容量 38
技巧26 使用DROP DATABASE删除MS-SQL Server数据库和事务处理日志 38
技巧28 理解MS-SQL Server的TempDB数据库 41
第2章 使用SQL数据定义语言(DDL)创建数据表和其他数据库对象 43
技巧29 使用CREATE TABLE语句创建表 43
技巧30 使用MS-SQL Server Enterprise Manager创建表 44
技巧31 创建MS-SQL Server的临时表 47
技巧32 使用Transact-SQL的CREATE DEFAULT语句设置列的默认值 47
技巧33 使用MS-SQL Server的存储过程sp_bindefault将用户创建的默认值绑定到表列上 49
技巧34 在CREATE TABLE语句中使用DEFAULT子句设置默认列值 50
技巧35 使用MS-SQL Server Enterprise Manager为用户定义的数据类型或表列创建默认值 51
技巧36 使用MS-SQL Server Enterprise Manager创建用户定义的数据类型 52
技巧37 使用MS-SQL Server Enterprise Manager将默认值绑定到数据类型或表列 54
技巧38 使用Transact-SQL的DROP DEFAULT语句从数据库中删除默认值 57
技巧39 使用ALTER TABLE语句向表中添加列 60
技巧40 使用MS-SQL Server的ALTER TABLE、DROP COLUMN子句删除表列 60
技巧41 使用ALTER TABLE语句改变列的宽度或数据类型 62
技巧42 使用ALTER TABLE语句改变主键和外键 63
技巧43 使用CREATE TABLE语句指定主键 65
技巧44 使用CREATE TABLE语句指定外键约束 66
技巧45 使用MS-SQL Server Enterprise Manager Create View Wizard创建视图 68
技巧46 理解DROP VIEW语句中的CASCADE和RESTRICT子句 72
第3章 使用SQL的数据操纵语言(DML)在SQL表内插入并操作数据 73
技巧47 使用INSERT语句向表中添加行 73
技巧48 使用INSERT语句通过视图插入行 74
技巧49 使用MS-SQL Server Enterprise Manager定义或改变主键约束 76
技巧50 使用INSERT语句向行的特定列中添加数据 77
技巧51 使用INSERT语句将一个表中的行插入另一表 79
技巧52 将MS-SQL Server的SELECT INTO/BULKCOPY数据库选项设置为TRUE以便加速从表到表的数据转移 82
技巧53 使用UPDATE语句改变列值 83
技巧54 使用带条件子句的UPDATE语句同时改变多行中的值 84
技巧56 使用UPDATE语句根据另一表中的值改变表的值 86
技巧55 在UPDATE语句中使用子查询同时改变多行中的值 86
技巧57 使用UPDATE语句通过视图改变表数据 87
技巧58 使用DELETE语句从表中删除行 89
技巧59 使用TRUNCATE语句从MS-SQL Server表中删除所有行 90
技巧60 使用DELETE语句通过视图删除表行 90
第4章 处理查询、表达式和总计函数 92
技巧61 理解SELECT语句的结构 92
技巧62 理解处理SQL的SELECT语句所涉及的步骤 93
技巧63 使用SELECT语句从一个或多个表的行中显示列 97
技巧64 使用SELECT语句显示列及计算值 98
技巧65 使用带WHERE子句的SELECT语句根据列值选择行 100
技巧66 在WHERE子句中使用布尔运算符OR、AND和NOT 100
技巧67 使用ORDER BY子句指定由SELECT语句返回行的顺序 101
技巧68 在WHERE子句中使用复合条件(AND、OR和NOT)根据多个列值(或计算值)选择行 104
技巧69 理解使用比较判式选择行时的NULL值 105
技巧70 使用行值表达式根据多个列值选择表中的行 106
技巧71 理解子查询 107
技巧72 使用行值子查询根据多个列值选择表中的行 108
技巧73 理解表达式 109
技巧74 理解SQL的判式 110
技巧75 理解集合(或列)函数 111
技巧76 理解CASE表达式 112
技巧77 使用CASE表达式更新列值 115
技巧78 使用CASE表达式避免错误条件 116
技巧79 理解NULLIF表达式 117
技巧80 使用COALESCE表达式代替NULL值 117
技巧81 使用COUNT(*)总计函数对表中的行数计数 118
技巧82 使用COUNT(*)总计函数对列中的数据值数计数 119
技巧83 使用COUNT(*)总计函数对列中的惟一和重复值计数 120
技巧84 使用MS-SQL Server的CUBE和ROLLUP运算符总计表的数据 122
技巧86 使用SUM()总计函数计算列值的总和 124
技巧85 使用MAX()总计函数找出列中的最大值 124
技巧87 使用AVG()总计函数计算列中值的平均值 125
技巧88 使用带AVG()函数的WHERE子句确定表中所选行的平均值 126
技巧89 理解SELECT语句中的总计函数如何产生单表结果 127
技巧90 使用AND逻辑连接符对表行进行多条件选择 127
技巧91 使用OR逻辑连接符对表行进行多条件选择 128
第5章 理解SQL的事务处理和事务处理日志 130
技巧92 理解SQL的事务处理过程 130
技巧93 理解ANSI/ISO的事务处理模型 131
技巧94 理解何时使用COMMIT语句 132
技巧95 使用ROLLBACK语句取消对数据库对象所做的改变 134
技巧96 理解MS-SQL Server的事务处理模型 136
技巧97 在MS-SQL Server上使用命名的和嵌套的事务处理 137
第6章 使用数据控制语言(DCL)建立数据库安全性 141
技巧98 理解MS-SQL Server标准和Windows NT的综合安全性 141
技巧99 使用MS-SQL Server Enterprise Manager添加登录和用户 142
技巧100 使用MS-SQL Server Enterprise Manager删除登录和用户 145
技巧101 理解MS-SQL Server的安全角色和组用户安全性 146
技巧102 理解MS-SQL Server的权限 148
技巧103 理解SQL的安全对象和权限 149
技巧104 使用MS-SQL Server Enterprise Manager创建数据库角色 150
技巧105 使用MS-SQL Server Enterprise Manager指定数据库角色权限 151
技巧106 使用GRANT语句的WITH GRANT OPTION允许用户向其他用户授予对数据库对象的访问权 153
技巧107 理解REVOKE语句 154
技巧108 使用带CASCADE选项的REVOKE语句删除权限 154
技巧109 使用REVOKE语句的GRANT OPTION FOR子句删除GRANT权限 156
技巧110 使用GRANT SELECT(以及REVOKE SELECT)语句控制对数据库对象的访问 157
技巧111 理解MS-SQL Server对SELECT权限的列清单扩展 158
技巧112 使用GRANT INSERT(以及REVOKE INSERT)语句控制对数据库对象的访问 159
技巧113 使用GRANT UPDATE(以及REVOKE UPDATE)语句控制对数据库对象的访问 160
技巧114 使用GRANT REFERENCES(以及REVOKE REFERENCES)语句控制对数据库对象的访问 162
技巧115 使用GRANT DELETE(以及REVOKE DELETE)语句控制对数据库对象的访问 164
技巧116 使用GRANTALL(以及REVOKEALL)语句授予(GRANT)或撤消(REVOKE)对数据库对象的权限 166
技巧117 使用视图将INSERT权限限制为只对表中的特定列 168
技巧118 使用视图将SELECT权限限制为只对表中的特定列 169
技巧119 使用视图扩展SQL安全性权限 169
第7章 创建索引加快数据引用 171
技巧120 理解MS-SQL Server如何选择用于查询的索引 171
技巧121 使用CREATE INDEX语句创建索引 172
技巧122 理解MS-SQL Server的CREATE INDEX语句选项 173
技巧123 使用MS-SQL Server Enterprise Manager创建索引 176
技巧124 使用DROP INDEX语句删除索引 178
技巧125 理解MS-SQL Server的集群索引 178
技巧126 使用MS-SQL Server Index Tuning Wizard(索引调节向导)优化数据库索引 179
第8章 使用键字和约束保持数据库的一致性 185
技巧127 理解单列和复合键字 185
技巧128 使用CREATE DOMAIN语句创建域 186
技巧129 使用PRIMARY KEY列约束惟一地确定表行 187
技巧130 理解引用完整性检查和外键 188
技巧131 理解引用数据完整性检查为什么会危害安全性 190
技巧132 理解引用完整性检查如何限制删除行和表的能力 191
技巧133 理解引用完整性检查的INSERT死锁及解决办法 192
技巧134 理解NULL值与惟一性的相互作用 194
技巧135 理解如何应用RESTRICT规则更新和删除以帮助保持引用完整性 195
技巧136 理解如何应用CASCADE规则更新和删除以帮助保持引用完整性 196
技巧137 理解如何应用SET NULL规则更新和删除以帮助保持引用完整性 197
技巧138 理解如何应用SET DEFAULT规则更新和删除以帮助保持引用完整性 197
技巧139 使用Enterprise Manager在已有表间添加FOREIGN KEY关系 198
技巧140 使用MATCH FULL子句保持引用完整性 201
技巧141 理解MATCH FULL、MATCH PARTIAL和MATCH SIMPLE子句 202
技巧142 理解SET NULL规则与MATCH子句的相互作用 203
技巧143 使用NOT NULL列约束防止列中的NULL值 205
技巧145 使用CHECK约束确认列值 206
技巧144 使用UNIQUE列约束防止列中的重复值 206
技巧146 使用MS-SQL Server Enterprise Manager将规则与数据类型或列绑定在一起 208
技巧147 使用Transact-SQL的CREATE RULE语句创建MS-SQL Server规则 210
技巧148 使用MS-SQL Server Enterprise Manager的Rule Properties屏幕改变规则 211
技巧149 使用Transact-SQL的DROP RULE语句永久地从数据库中删除规则 212
技巧150 使用MS-SQL Server Enterprise Manager列出并编辑视图 213
技巧151 使用CREATE ASSERTION语句创建多表约束 214
第9章 执行多表查询并创建SQL视图 216
技巧152 使用带FROM子句的SELECT语句进行多表查询 216
技巧153 使用视图显示一个或多个表或视图中的列 217
技巧154 使用视图显示一个或多个表的特定行中的列 218
技巧155 使用UPDATE语句通过视图改变多个表中的数据 219
技巧156 在CREATE VIEW语句中使用CHECK OPTION子句将视图约束应用于INSERT和UPDATE语句 220
技巧157 在CREATE VIEW语句中使用GROUP BY子句创建显示总结数据的视图 221
技巧158 使用CREATE VIEW语句显示组合两个或多个表的结果 222
技巧159 使用UNION运算符选择出现在任一或全部的两个或多个表中的所有行 223
技巧160 使用UNION ALL运算符选择出现在任一或全部的两个或多个表中的所有行(包括重复的行) 225
技巧161 使用UNION CORRESPONDING运算符组合来自两个或多个与UNION不兼容的表中的行 226
技巧162 使用UNION运算符组合两条查询的结果 227
技巧163 使用ORDER BY子句对UNION运算的结果排序 228
技巧164 使用UNION运算符组合3个或3个以上的表 228
技巧165 理解MS-SQL Server的事务处理日志放于何处才能改善性能 230
技巧166 理解多列的UNIQUE约束 230
第10章 使用函数、参数和数据类型 232
技巧167 理解实际值 232
技巧168 使用SUBSTRING函数提取部分字符串 232
技巧169 使用DISTINCT子句消除行集中的重复 233
技巧170 使用Transact-SQL的STUFF函数将字符串插入另一字符串 235
技巧171 使用Transact-SQL的串接运算符“+”在另一字符串尾部添加字符串 235
技巧172 使用INTERSECT运算符选择出现在所有两个或多个源表中的行 236
技巧173 使用EXCEPT运算符选择出现在一个表而不出现在另一表中的行 237
技巧174 使用POSITION函数返回字母或子字符串在字符串中的位置 238
技巧175 使用CHAR_LENGTH函数返回字符串变量的长度 239
技巧176 使用OCTET_LENGTH函数决定用于保存字符串变量或实际值所需的字节数 240
技巧177 使用BIT_LENGTH函数决定用于保存字符串变量或实际值所需的位数 241
技巧178 使用EXTRACT函数从DATETIME值中提取单个域 241
技巧179 使用CURRENT_TIME函数读取当前系统时间 242
技巧180 使用CURRENT_DATE函数读取当前系统日期 242
技巧181 使用CURRENT_TIMESTAMP函数读取当前系统日期和时间 243
技巧182 理解MS-SQL Server的日期和时间函数 243
技巧183 使用CAST函数将值从一种数据类型转化为另一种 245
技巧184 使用CASE表达式根据列的值选择实际值 247
技巧185 在搜索的CASE表达式中使用子查询 248
技巧186 使用NULLIF函数将列值设置为NULL 249
技巧187 使用CAST函数比较不同数据类型列中的值 250
技巧188 使用CAST函数从SQL向宿主语言中传递值 250
技巧189 理解在Select语句中如何使用修饰子句 251
第11章 使用比较判式和组合查询 253
技巧190 在WHERE子句中使用BETWEEN关键词选择行 253
技巧191 在WHERE子句中使用IN或NOT IN判式选择行 254
技巧192 在LIKE判式中使用通配符 254
技巧193 在LIKE判式中使用转义字符 255
技巧194 使用LIKE和NOT LIKE比较两个字符串 256
技巧195 理解MS-SQL Server对LIKE判式中的通配符的扩展 256
技巧196 使用NULL判式找出所选列中有NULL值的所有行 257
技巧197 理解UNIQUE判式 258
技巧198 使用OVERLAPS判式决定一个DATETIME是否与另一个重叠 259
技巧199 理解GROUP BY子句和组合查询 259
技巧200 使用GROUP BY子句根据单一列值组合行 260
技巧201 使用GROUP BY子句根据多列组合行 261
技巧202 使用ORDER BY子句改变由GROUP BY子句返回的组中的行序 262
技巧203 使用MS-SQL Transact-SQL的COMPUTE子句在同一结果表中显示明细及汇总行 263
技巧204 使用MS-SQLTransact-SQL的COMPUTE和COMPUTE BY子句显示多级分类汇总 264
技巧205 理解GROUP BY子句如何看待NULL值 266
技巧206 使用HAVING子句筛选包括在组合查询结果表中的行 267
技巧207 理解在组合查询中使用HAVING子句的SQL规则 268
技巧208 理解SQL如何处理HAVING子句的NULL结果值 269
第12章 使用SQL的联合语句和其他多表查询 271
技巧209 使用来自多个MS-SQL Server数据库中的表 271
技巧210 使用FROM子句执行多表查询 272
技巧211 使用WHERE子句联合与单列PRIMARY KEY/FOREIGN KEY对相关的两个表 272
技巧212 使用WHERE子句联合与复合的PRIMARY KEY/FOREIGN KEY对相关的两个表 274
技巧213 使用WHERE子句根据父/子关系联合3个或多个表 275
技巧214 使用WHERE子句根据非键字列联合表 276
技巧215 理解非等价联合 277
技巧216 在有一个或多个相同列名的联合的多个表中多表查询中使用合格的列名 278
技巧217 使用带INTERSECT运算符的ALL关键词在查询结果表中包括重复的行 279
技巧218 在对非UNION兼容表的INTERSECT查询中使用CORRESPONDING关键词 281
技巧219 使用没有WHERE子句的多表联合生成笛卡尔积 282
技巧220 使用别名(关联名)作为表名的简写 283
技巧221 理解NATURAL JOIN 284
技巧222 理解条件联合 285
技巧223 使用CROSS JOIN创建笛卡尔积 286
技巧224 理解列名联合 287
技巧225 使用INNER JOIN选择一个表中与另一表中的行相关的所有行 288
技巧226 理解USING子句在INNER JOIN中的作用 289
技巧227 理解OUTER JOIN 290
技巧228 理解LEFT(RIGHT)OUTER JOIN 291
技巧229 理解FULL OUTER JOIN 293
技巧230 理解MS-SQL Server的OUTER JOIN记号 294
技巧231 在单一查询中联合两个以上的表 294
技巧232 理解非相等的INNER和OUTER JOIN语句 296
技巧233 理解UNION JOIN 296
技巧234 使用COALESCE表达式改善UNION JOIN的结果 298
技巧235 理解FROM子句在JOIN语句中的作用 299
技巧236 在多表JOIN中使用“*”运算符指明所有或只是某些表中的所有列 300
技巧237 在单表JOIN(即自我JOIN)中使用表别名 301
技巧238 理解表的别名 302
技巧239 理解ANY的模糊本质以及SQL如何使其表示SOME 304
技巧240 使用EXISTS而不使用COUNT(*)检查子查询是否至少返回一行 305
技巧241 理解何时使用ON子句以及何时使用WHERE子句 306
技巧242 理解如何使用嵌套的查询同时处理多个表 308
第13章 理解SQL子查询 310
技巧243 理解在子查询中引用时的主查询列的值 310
技巧244 在子查询中使用EXISTS判式来决定行中是否有满足搜索标准的列值 310
技巧245 使用关键词IN引入子查询 311
技巧246 使用ALL引入返回多个值的子查询 312
技巧247 在子查询中使用总计函数返回单值 313
技巧248 理解WHERE子句中子查询的作用 313
技巧249 使用嵌套查询返回TRUE或FALSE值 314
技巧250 理解HAVING子句中子查询的作用 315
技巧251 理解JOIN语句中关联的和非关联的子查询的执行顺序 317
技巧252 使用关键词IN引入关联子查询来确定有特定值的表列的存在性 318
技巧253 理解用比较运算符引入的关联子查询 318
技巧254 将关联子查询用作HAVING子句中的过滤器 319
技巧255 使用关联子查询为UPDATE语句选择行 321
第14章 理解事务处理隔离级别和并发处理 322
技巧256 使用带关联子查询的INSERT语句创建快照表 322
技巧257 GRANT语句授予某人以DELETE权限 323
技巧258 理解(CASCADE和非CASCADE)取消GRANT权限的效果 324
技巧259 理解如何一起使用GRANT和REVOKE语句以便在授予权限时节省时间 325
技巧260 理解并发事务处理问题和隔离级别 325
技巧261 理解READ UNCOMMITTED和作废读取 327
技巧262 理解READ COMMITTED和不可重复读取 327
技巧263 理解REPEATABLE READ和幻影插入 328
技巧264 理解MS-SQL Server的锁定扩大 329
技巧265 理解死锁以及DBMS如何解决死锁 330
技巧266 理解SERIALIZABLE隔离级别 330
技巧267 理解REPEATABLE READ隔离级别 331
技巧268 理解READ COMMITTED隔离级别 332
技巧269 理解READ UNCOMMITTED隔离级别 333
技巧270 使用MS-SQL Server Enterprise Manager显示阻塞和被阻塞的会话 334
技巧271 使用MS-SQL Server Enterprise Manager“杀死”对数据库对象保持锁定的进程 335
技巧272 理解MS-SQL Server与Oracle上的锁定和事务处理隔离 336
技巧273 使用SET TRANSACTION语句设置事务处理的隔离级别 337
技巧274 使用COMMIT语句使数据库更新成为永久的 338
技巧275 使用SET CONSTRAINTS语句在提交事务处理之前延缓DEFERRABLE约束 340
第15章 编写外部应用程序来查询与操作数据库数据 341
技巧276 为开放数据库互连(ODBC)连接创建数据源名称(DSN) 341
技巧277 向Visual Basic(VB)窗体中添加数据控件组件以便提取SQL表数据 344
技巧278 向Visual Basic(VB)窗体中添加MSFlexGrid控件以显示SQL表数据 345
技巧279 向Visual Basic(VB)窗体中添加Text和Button控件创建向SQL Server发送查询的应用程序 347
技巧280 创建用于与SQL Server通讯的简单C++外壳程序 349
技巧281 使用SQLAllocEnv和SQLFreeEnv分配及释放ODBC环境资源 350
技巧282 使用SQLAllocConnect和SQLFreeConnect分配和释放连接句柄和内存资源 351
技巧283 使用SQLSetConnectOption为与SQL Server的ODBC连接设置会话选项 353
技巧284 使用SQLConnect和SQLDisconnect建立和结束DBMS会话 354
技巧285 使用SQLAllocEnv和SQLFreeEnv分配及释放SQL语句句柄和内存资源 356
技巧286 使用SQLExecDirect向DBMS发送用于执行的SQL语句 357
技巧287 使用SQLFetch函数从SQL数据库中提取数据行 359
技巧288 使用SQLExtendedFetch函数创建可更新的游标(Cursor) 361
技巧289 理解行式和列式绑定之间的差别 362
技巧290 使用SQLSetConnectOption函数选择在执行SQL语句时使用的数据库 364
技巧291 使用SQLSetPos函数设置行集中的游标位置 365
技巧292 使用SQLSetPos函数的SQL UPDATE选项执行定位更新 365
技巧293 使用SQLSetPos函数的SQL DELETE选项执行定位删除 366
技巧294 当ODBC驱动程序不支持定位删除时使用SQLExecDirect函数删除数据库中的行 367
技巧295 在ODBC驱动程序不支持定位更新时使用SQLExecDirect函数更新数据库中的列值 368
技巧296 使用SQLError函数提取并显示ODBC错误代码和错误消息 369
技巧297 在宿主程序变量中处理NULL值 370
技巧298 向Visual Basic(VB)中添加DB函数库(DBLIB)功能 371
技巧299 使用SqlInit()函数初始化DB函数库以及使用SqlWinExit例程释放由SqlInit()分配的内存 373
技巧300 使用SqlOpenConnection()函数登录MS-SQL Server 374
技巧301 使用SqlClose()例程关闭单个MS-SQL Server连接或者调用SqlExit关闭所有打开的连接 375
技巧302 使用SqlSendCmd函数向MS-SQL Server发送用于执行的SQL语句 375
技巧303 使用SqlNumCols()函数确定由查询生成的结果集中的列数 376
技巧304 使用SqlColName()函数提取由查询生成的结果集中的列名 377
技巧305 使用SqlData()函数从游标中将查询结果提取到应用程序中 378
技巧306 使用SqlNextRow()函数在游标行中向前移动 379
技巧307 使用SqlCmd()函数建立SQL语句批处理 380
技巧308 使用SqlExec()函数将SQL语句批处理提交给MS-SQL Server执行 381
技巧309 使用SqlResults()函数提取SqlExec()发送的查询结果集 381
技巧310 使用SqlSend()提交语句批处理而不必等待DBMS完成所有语句的执行 382
技巧311 使用SqlDataReady()函数确定MS-SQL Server是否完成了SQL语句批处理 383
技巧312 使用SqlCancel()终止发送到MS-SQL Server的语句批处理并清除批结果缓冲区 384
技巧313 使用SqlCanQuery()函数在当前结果集中删除剩余(未被处理的)行 385
技巧314 使用SqlUse()函数为MS-SQL Server连接设置当前数据库 386
技巧315 使用Vbsql1_Error()例程显示DBLIB生成的错误消息 387
技巧316 使用Vbsql1_Message()例程显示MS-SQL Server生成的错误消息 388
技巧317 使用SqlColType()函数确定列的数据类型 389
技巧318 使用SqlDatLen()函数确定储存在DBLIB缓冲区列中的数据的字节数 390
技巧319 在Visual Basic应用程序中给宿主变量指定NULL值 391
技巧320 使用SqlSetOpt()设置行缓冲区的大小以便用SqlGetRow()随机提取行 392
技巧321 使用SqlGetRow()函数在DBLIB查询结果缓冲区中选择当前行 393
技巧322 使用SqlClrBuff()函数在DBLIB查询结果缓冲区中为附加行腾出空间 394
技巧323 理解MS-SQL Server的SELECT语句中的FOR BROWSE子句 395
技巧324 理解DBLIB为什么不支持定位UPDATE和DELETE语句 395
技巧325 理解DBLIB浏览模式的函数 396
技巧327 执行DBLIB浏览模式的DELETE语句 397
技巧326 使用SqlQual()函数为DBLIB浏览模式的UPDATE或DELETE语句生成WHERE子句 397
技巧328 执行DBLIB浏览模式的UPDATE语句 398
技巧329 用DBLIB API执行动态SQL查询 399
第16章 通过游标提取和维护数据 402
技巧330 理解游标的目的 402
技巧331 使用DECLARE CURSOR语句定义游标 402
技巧332 使用OPEN语句创建游标 403
技巧333 使用ORDER BY子句改变游标中行的顺序 404
技巧334 在游标中包含计算好的值作为列 405
技巧335 使用FOR UPDATE子句指定游标可修改底层表的哪些列 405
技巧336 使用FETCH语句从游标中的行提取列值 406
技巧337 把游标的当前行指针预先定向到从当前行获取列值 407
技巧338 理解基于游标的定位DELETE语句 408
技巧339 理解基于游标的定位UPDATE语句 409
技巧341 使用@@FETCH_STATUS利用WHILE循环处理游标中的行 410
技巧340 使用索引改变游标中行的顺序 410
技巧342 使用DEALLOCATE语句删除游标并释放其服务器资源 411
技巧343 理解DECLARE CURSOR语句的Transact-SQL扩展句法 412
技巧344 使用@@CURSOR_ROWS系统变量确定游标中的行数 413
第17章 理解触发器 415
技巧345 理解何时用CHECK约束代替触发器 415
技巧346 理解嵌套游标 415
技巧347 理解当前日期和时间的值是在语句开始执行时设置的 417
技巧348 用CREATE TRIGGER语句创建触发器 418
技巧349 理解INSERT触发器 420
技巧350 理解DELETE触发器 421
技巧351 理解UPDATE触发器 422
技巧352 用UPDATE触发器改变PRIMARY KEY/FOREIGN KEY对的值 423
技巧353 用触发器发送E-mail消息 425
技巧354 用MS-SQL Server Enterprise manager显示或修改触发器 425
技巧355 用ALTER VIEW语句修改视图 427
技巧356 用ALTER TABLE语句改变列的数据类型 428
第18章 处理Blobs数据和文本 429
技巧357 理解由二进制和字符大对象(BLOB)的处理带来的挑战 429
技巧358 理解MS-SQL Server的BLOB(TEXT、NTEXT和IMAGE)数据处理过程 430
技巧359 用INSERT或UPDATE语句把数据放到BLOB数据类型的列中 431
技巧360 用Transact-SQL WRITETEXT语句把数据放到TEXT、NTEXT或IMAGE列中 432
技巧361 用Transact-SQL UPDATETEXT语句改变TEXT、NTEXT或IMAGE列的内容 433
技巧362 用READTEXT()函数读取TEXT、NTEXT或IMAGE列中的部分(或全部)数据 434
技巧363 用MS-SQL Server的TEXTVALID()函数确定文本指针是否有效 435
技巧364 用PATINDEX()函数返回BLOB中第一次出现的地址 435
技巧365 用DATALENGTH()函数返回BLOB中的字节数 436
技巧366 理解TEXTSIZE选项和@@TEXTSIZE()函数 437
第19章 使用MS-SQL Server信息架构视图 438
技巧367 理解信息架构 438
技巧368 理解信息架构的CHECK_CONSTRAINTS视图 438
技巧369 理解信息架构的COLUMN_DOMAIN_USAGE视图 439
技巧370 理解信息架构的COLUMN_PRIVILEGES视图 440
技巧371 理解信息架构的COLUMNS视图 440
技巧372 理解信息架构的CONSTRAINT_COLUMN USAGE视图 442
技巧373 理解信息架构的CONSTRAINT_TABLE_USAGE视图 443
技巧374 理解信息架构的DOMAIN_CONSTRAINTS视图 444
技巧375 理解信息架构的DOMAINS视图 444
技巧376 理解信息架构的KEY_COLUMN_USAGE视图 445
技巧377 理解信息架构的PARAMETERS视图 446
技巧378 理解信息架构的REFERENTIAL_CONSTRAINTS视图 447
技巧379 理解信息架构的ROUTINES视图 449
技巧380 理解信息架构的SCHEMATA视图 451
技巧381 理解信息架构的TABLE_CONSTRAINTS视图 451
技巧382 理解信息架构的TABLE_PRIVILEGES视图 452
技巧383 理解信息架构的TABLES视图 453
技巧385 理解信息架构的VIEW_TABLE_USAGE视图 454
技巧384 理解信息架构的VIEW_COLUMN_USAGE视图 454
技巧386 理解信息架构的ROUTINE_COLUMNS视图 455
技巧387 理解信息架构的VIEWS视图 456
技巧388 用MS-SQL Server Enterprise Manager查看信息架构视图的内容 457
技巧389 理解MS-SQL Server系统数据库表 459
技巧390 定义数据库的物理位置 460
技巧391 向已有数据库添加文件和文件组 461
技巧392 通过创建联接表视图简化多表查询 462
技巧393 理解CREATE VIEW语句中的WITH SCHEMABINDING子句 463
第20章 监测及提高MS-SQL Server的性能 465
技巧394 理解多处理器Windows NT系统上的MS-SQL Server多任务与多线程 465
技巧395 用MS-SQL Server的PRIORITY BOOST配置选项把服务器线程的优先权从7增加到13 466
技巧396 理解NT Server的性能监视器的图表视图 467
技巧397 理解NT Server性能监视器的报告视图 468
技巧398 理解NT Server性能监视器的警报视图 470
技巧399 使用CREATE SCHEMA语句创建表并授予对此表的访问权限 471
技巧400 建立NT Server性能监视器日志以帮助优化MS-SQL Server 473
技巧401 用NT性能监视器查看性能日志文件 474
技巧402 配置Windows NT的应用程序事件日志 476
技巧403 显示Windows NT应用程序事件详情并清除应用程序事件日志 477
技巧404 用MS-SQL Server服务管理器启动MS-SQL Server 478
技巧405 理解如何恢复MS-SQLServer数据库 479
技巧406 理解MS-SQLServer优化器提示 484
技巧407 用MS-SQL Server的SHOWPLAN_TEXT选项显示语句的执行计划 486
技巧408 理解显示语句执行计划和状态的MS-SQL Server SHOWPLAN_ALL选项 487
技巧409 使用MS-SQL Server SQL Query Analyzer的SHOWPLAN选项 488
技巧410 用MS-SQL Server SETUSER语句测试用户对数据库对象的访问权限 490
第21章 使用存储过程 491
技巧411 理解存储过程 491
技巧412 使用CREATE PROCEDURE语句创建存储过程 492
技巧413 用EXECUTE语句调用存储过程 494
技巧414 使用存储过程参数返回值 495
技巧415 用关键词RETURN从存储函数中返回一个值 497
技巧416 在存储过程中使用游标 499
技巧417 使用CREATE FUNCTION语句创建存储函数 502
技巧418 使用MS-SQL Server Enterprise Manager查看或修改存储过程或函数 505
技巧419 使用Transact-SQL关键词DECLARE和SELECT在存储过程中定义变量并为其赋初始值 507
第22章 修理及维护MS-SQL Server数据库文件 509
技巧420 理解MS-SQL Server的Database Consistency Checker(DBCC,数据库一致检查器) 509
技巧421 理解DBCC的维护语句 510
技巧422 理解DBCC的杂项语句 514
技巧423 理解DBCC的状态语句 515
技巧424 理解DBCC的确认语句 520
第23章 编写高级查询及子查询 526
技巧425 理解对用作比较运算符判式的子查询的限制 526
技巧426 使用视图允许子查询中的工作表自我联合 527
技巧427 使用临时表删除重复数据 528
技巧428 使用临时表从多表中删除行 529
技巧429 使用UPDATE语句根据另一个表中的值设置表中的值 531
技巧430 优化EXISTS判式 532
技巧431 使用ALL判式把两个查询合二为一 534
技巧432 使用EXISTS判式检查表中的重复行 535
技巧433 把表内容和函数结果合并 536
技巧434 使用视图显示汇总级别的层次 537
技巧435 使用带标量子查询的SELECT语句显示流水总计 538
技巧436 使用EXCEPT判式确定两表差异 539
技巧437 使用EXISTS判式生成两表的交集 540
第24章 探索MS-SQL Server的内建存储过程 542
技巧438 使用sp_detach_db和sp_attach_db在MS-SQL Server上删除和添加数据库 542
技巧439 使用MS-SQL Server的存储过程sp_addtype和sp_droptype添加和删除用户定义的数据类型 543
技巧440 使用sp_help显示数据库对象属性 544
技巧441 使用sp_helptext显示定义存储过程、用户定义函数、触发器、默认值、规则或者视图的文本 546
技巧442 用sp_depends显示定义视图的表和(或)视图 546
技巧443 使用sp_helpconstraint显示有关表约束的信息 547
技巧444 使用sp_pkeys显示表的PRIMARY KEY信息 549
技巧445 使用sp_fkeys显示关于引用表的PRIMARY KEY的外键信息 550
技巧446 使用sp_procoption控制MS-SQL Server启动时运行的存储过程 552
技巧447 使用sp_spaceused显示分配给数据库或单独的数据库对象的已用与未用空间量 553
技巧448 使用sp_helptrigger显示有关表上的触发器信息 554
技巧449 使用sp_who和KILL命令控制运行在MS-SQL Server上的进程 556
技巧450 使用sp_lock显示数据库所掌握的锁定信息 557
技巧451 使用sp_password改变账户密码 559
第25章 通过Internet处理SQL数据库中的数据 561
技巧452 使用sp_makewebtask创建生成Web页面的任务 561
技巧453 为MS-SQL Server查询结果创建Web页面模板 566
技巧454 格式化由MS-SQL Server存储过程创建的Web页面上的查询结果表 569
技巧455 使用sp_makewebtask在链接的Web页面上显示IMAGE和TEXT数据 571
技巧456 使用内建的存储过程启动或删除Web任务 574
技巧457 使用MS-SQL Server Web Assistant Wizard创建执行存储过程的Web任务 575
技巧458 下载并安装PHP 580
技巧459 建立数据源(DSN)与SQL DBMS的连接 581
技巧460 下载、安装并使用MyODBC驱动程序与MySQL数据库连接 584
技巧461 与MS-SQL Server或MySQL DBMS建立无DSN的连接 587
技巧462 使用ADO Connection对象执行SELECT语句设置访问Web站点的用户名/密码 589
技巧463 在Web页面上的HTML表中显示查询结果 591
技巧464 编写可重用的PHP例程在Web页面上显示查询结果 593
技巧465 通过HTML表单提交SQL查询 598
技巧466 使用HTML表单向SQL表中插入数据 602
技巧467 通过HTML表单更新及删除数据库数据 604
技巧468 从脚本内调用存储过程 608
技巧469 使用VBScript处理Recordset对象 609
技巧470 通过Internet处理SQL的事务处理过程 613
技巧471 创建与MS-SQL Server的虚拟连接 615
技巧472 使用HTTP执行SQL语句 619
技巧473 使用XML架构利用HTTP提交查询并使用XSL样式表来格式化查询结果 621
技巧474 显示保存在SQL表内的图像数据 626