﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-转行了，但是每次上网都会过来看看。或许几年以后我又会从事这个行业。</title><link>http://www.cnblogs.com/zhaoxiaoyang/</link><description> 破晓之阳</description><language>zh-cn</language><lastBuildDate>Tue, 19 Aug 2008 21:18:07 GMT</lastBuildDate><pubDate>Tue, 19 Aug 2008 21:18:07 GMT</pubDate><ttl>60</ttl><item><title>SQL 查找某年某月的天数</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/12/1218055.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Wed, 11 Jun 2008 22:50:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/12/1218055.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1218055.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/12/1218055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1218055.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1218055.html</trackback:ping><description><![CDATA[<p><font face="Verdana">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@年月</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">)<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@年月</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">202002</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">day</span><span style="color: #000000">(</span><span style="color: #ff00ff">dateadd</span><span style="color: #000000">(</span><span style="color: #ff00ff">month</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="color: #008000">@年月</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">01</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span><span style="color: #808080">-</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="font-weight: bold; color: #800000">29</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</font>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1218055.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41783/" target="_blank">[新闻]微软披露Windows 7功能开发团队名单</a>]]></description></item><item><title>SQL操作全集</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/08/1215960.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Sun, 08 Jun 2008 07:15:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/08/1215960.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1215960.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/08/1215960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1215960.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1215960.html</trackback:ping><description><![CDATA[SQL操作全集 <br />
<br />
下列语句部分是Mssql语句，不可以在access中使用。 <br />
<br />
SQL分类： <br />
DDL—数据定义语言(CREATE，ALTER，DROP，DECLARE) <br />
DML—数据操纵语言(SELECT，DELETE，UPDATE，INSERT) <br />
DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK) <br />
<br />
首先,简要介绍基础语句： <br />
1、说明：创建数据库 <br />
CREATE DATABASE database-name <br />
2、说明：删除数据库 <br />
drop database dbname <br />
3、说明：备份sql server <br />
--- 创建 备份数据的 device <br />
USE master <br />
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' <br />
--- 开始 备份 <br />
BACKUP DATABASE pubs TO testBack <br />
4、说明：创建新表 <br />
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) <br />
根据已有的表创建新表： <br />
A：create table tab_new like tab_old (使用旧表创建新表) <br />
B：create table tab_new as select col1,col2&#8230; from tab_old definition only <br />
5、说明：删除新表drop table tabname <br />
6、说明：增加一个列 <br />
Alter table tabname add column col type <br />
注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。 <br />
7、说明：添加主键： Alter table tabname add primary key(col) <br />
说明：删除主键： Alter table tabname drop primary key(col) <br />
8、说明：创建索引：create [unique] index idxname on tabname(col&#8230;.) <br />
删除索引：drop index idxname <br />
注：索引是不可更改的，想更改必须删除重新建。 <br />
9、说明：创建视图：create view viewname as select statement <br />
删除视图：drop view viewname <br />
10、说明：几个简单的基本的sql语句 <br />
选择：select * from table1 where 范围 <br />
插入：insert into table1(field1,field2) values(value1,value2) <br />
删除：delete from table1 where 范围 <br />
更新：update table1 set field1=value1 where 范围 <br />
查找：select * from table1 where field1 like &#8217;%value1%&#8217; ---like的语法很精妙，查资料! <br />
排序：select * from table1 order by field1,field2 [desc] <br />
总数：select count * as totalcount from table1 <br />
求和：select sum(field1) as sumvalue from table1 <br />
平均：select avg(field1) as avgvalue from table1 <br />
最大：select max(field1) as maxvalue from table1 <br />
最小：select min(field1) as minvalue from table1 <br />
11、说明：几个高级查询运算词 <br />
A： UNION 运算符 <br />
UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <br />
B： EXCEPT 运算符 <br />
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <br />
C： INTERSECT 运算符 <br />
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。 <br />
注：使用运算词的几个查询结果行必须是一致的。 <br />
12、说明：使用外连接 <br />
A、left outer join： <br />
左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <br />
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c <br />
B：right outer join: <br />
右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <br />
C：full outer join： <br />
全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。 <br />
<br />
其次，大家来看一些不错的sql语句 <br />
1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用) <br />
法一：select * into b from a where 1 &lt;&gt;1 <br />
法二：select top 0 * into b from a <br />
<br />
2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用) <br />
insert into b(a, b, c) select d,e,f from b; <br />
<br />
3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) <br />
insert into b(a, b, c) select d,e,f from b in &#8216;具体数据库&#8217; where 条件 <br />
例子：..from b in '"&amp;Server.MapPath(".")&amp;"\data.mdb" &amp;"' where.. <br />
<br />
4、说明：子查询(表名1：a 表名2：b) <br />
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) <br />
<br />
5、说明：显示文章、提交人和最后回复时间 <br />
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b <br />
<br />
6、说明：外连接查询(表名1：a 表名2：b) <br />
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c <br />
<br />
7、说明：在线视图查询(表名1：a ) <br />
select * from (SELECT a,b,c FROM a) T where t.a &gt; 1; <br />
<br />
8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括 <br />
select * from table1 where time between time1 and time2 <br />
select a,b,c, from table1 where a not between 数值1 and 数值2 <br />
<br />
9、说明：in 的使用方法 <br />
select * from table1 where a [not] in (&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;) <br />
<br />
10、说明：两张关联表，删除主表中已经在副表中没有的信息 <br />
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) <br />
<br />
11、说明：四表联查问题： <br />
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..... <br />
<br />
12、说明：日程安排提前五分钟提醒 <br />
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5 <br />
<br />
13、说明：一条sql 语句搞定数据库分页 <br />
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 <br />
<br />
14、说明：前10条记录 <br />
select top 10 * form table1 where 范围 <br />
<br />
15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) <br />
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) <br />
<br />
16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表 <br />
(select a from tableA ) except (select a from tableB) except (select a from tableC) <br />
<br />
17、说明：随机取出10条数据 <br />
select top 10 * from tablename order by newid() <br />
<br />
18、说明：随机选择记录 <br />
select newid() <br />
<br />
19、说明：删除重复记录 <br />
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) <br />
<br />
20、说明：列出数据库里所有的表名 <br />
select name from sysobjects where type='U' <br />
<br />
21、说明：列出表里的所有的 <br />
select name from syscolumns where id=object_id('TableName') <br />
<br />
22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select 中的case。 <br />
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type <br />
显示结果： <br />
type vender pcs <br />
电脑 A 1 <br />
电脑 A 1 <br />
光盘 B 2 <br />
光盘 A 2 <br />
手机 B 3 <br />
手机 C 3 <br />
<br />
23、说明：初始化表table1 <br />
TRUNCATE TABLE table1 <br />
<br />
24、说明：选择从10到15的记录 <br />
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc <br />
　　 <br />
随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现） <br />
　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP&#8220;找个随机数&#8221;然后打印出来。实际上常见的解决方案是建立如下所示的循环： <br />
Randomize <br />
RNumber = Int(Rnd*499) +1 <br />
　 <br />
While Not objRec.EOF <br />
If objRec("ID") = RNumber THEN <br />
... 这里是执行脚本 ... <br />
end if <br />
objRec.MoveNext <br />
Wend <br />
　 <br />
　　这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495，那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？ <br />
　　采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示： <br />
Randomize <br />
RNumber = Int(Rnd*499) + 1 <br />
　 <br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber <br />
　 <br />
set objRec = ObjConn.Execute(SQL) <br />
Response.WriteRNumber &amp; " = " &amp; objRec("ID") &amp; " " &amp; objRec("c_email") <br />
　 <br />
　　不必写出RNumber 和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作&#8220;随机&#8221;记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。 <br />
再谈随机数 <br />
　　现在你下定决心要榨干Random 函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 <br />
　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录： <br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber &amp; " OR ID = " &amp; RNumber2 &amp; " OR ID = " &amp; RNumber3 <br />
　 <br />
　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是 SELECT 语句只显示一种可能（这里的ID 是自动生成的号码）： <br />
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " &amp; RNumber &amp; " AND " &amp; RNumber &amp; "+ 9" <br />
<br />
　　注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。 <br />
<br />
　 <br />
随机读取若干条记录，测试过 <br />
Access语法：SELECT top 10 * From 表名 ORDER BY Rnd(id) <br />
Sql server:select top n * from 表名 order by newid() <br />
mysqlelect * From 表名 Order By rand() Limit n <br />
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) <br />
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ... <br />
使用SQL语句 用...代替过长的字符串显示 <br />
语法： <br />
SQL数据库：select case when len(field)&gt;10 then left(field,10)+'...' else field end as news_name,news_id from tablename <br />
Access数据库：SELECT iif(len(field)&gt;2,left(field,2)+'...',field) FROM tablename; <br />
　 <br />
Conn.Execute说明 <br />
Execute方法 <br />
　　该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种： <br />
　　　　1．执行SQL查询语句时，将返回查询得到的记录集。用法为： <br />
　　　　Set 对象变量名=连接对象.Execute("SQL 查询语言") <br />
　　　Execute方法调用后，会自动创建记录集对象，并将查询结果存储在该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。 <br />
<br />
　　　　2．执行SQL的操作性语言时，没有记录集的返回。此时用法为： <br />
　　　　连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option] <br />
　　　　　　&#183;RecordAffected 为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。 <br />
　　　　　　&#183;Option 可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。 <br />
<br />
&#183;BeginTrans、RollbackTrans、CommitTrans方法 <br />
<br />
<br />
<br />
<font face="Verdana">http://topic.csdn.net/u/20080515/16/6f359854-5403-4397-89e3-b1b8dd71d527.html</font><br />
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1215960.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41782/" target="_blank">[新闻]谷歌Android SDK软件界面浮现</a>]]></description></item><item><title>创建触发器和使用示例(于海涛 老师的实验课)</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/06/1215196.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Fri, 06 Jun 2008 07:53:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/06/1215196.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1215196.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/06/06/1215196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1215196.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1215196.html</trackback:ping><description><![CDATA[<div class="tit">创建触发器和使用示例</div>
<div class="date">&nbsp;</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <div class="txtcontent"><span>
            <p>1、数据表的建立</p>
            <p>use login</p>
            <p>create table voteMaster&nbsp;&nbsp; -----主表<br />
            (<br />
            voteId int primary key,&nbsp;&nbsp;&nbsp; --编号<br />
            voteTitle varchar(100) not null,&nbsp;&nbsp; ---投票的项目<br />
            voteSum int default 0&nbsp;&nbsp; --总票数，默认为0<br />
            )<br />
            insert into voteMaster values(1,'选举工会主席',0)<br />
            insert into voteMaster values(2,'对网站的建议',0)</p>
            <p>create table voteDetails&nbsp;&nbsp;&nbsp; ---从表<br />
            (<br />
            voteId int foreign key references voteMaster(voteId),----外键 约束<br />
            voteDetailsId int not null,<br />
            voteItem varchar(20) not null,<br />
            votNum int default 0,<br />
            primary key(voteId,voteDetailsId)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----连合主键<br />
            )<br />
            </p>
            <p>insert into voteDetails values(1,1,'于海涛',0)<br />
            insert into voteDetails values(1,2,'王小刚',0)<br />
            insert into voteDetails values(1,3,'张老三',0)</p>
            <p>insert into voteDetails values(2,1,'非常好',0)<br />
            insert into voteDetails values(2,2,'好',0)<br />
            insert into voteDetails values(2,3,'一般',0)<br />
            insert into voteDetails values(2,4,'需要改进',0)</p>
            <p>2、触发器的创建</p>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 5px; background: #f3f3f3; padding-bottom: 5px; margin: 5px 20px; border-left: #cccccc 1px solid; padding-top: 5px; border-bottom: #cccccc 1px solid">
            <p>create trigger updateMaster&nbsp;&nbsp; -----创建触发器<br />
            on voteDetails&nbsp;&nbsp;&nbsp;&nbsp; -----触发器所建的表<br />
            for update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----触发器的条件<br />
            as<br />
            begin<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update voteMaster set voteSum=voteSum+1 where voteId=(select top 1 voteid from <font color="#3300ff">inserted</font>)<br />
            end</p>
            </div>
            <p>最终效果：</p>
            <p>你只要对voteDetails 内votNum的数据进行更新，那么主表voteMaster 的voteSum就会加1，从而实现了对投票的总数的统计的实现。</p>
            <p>注意:&nbsp;&nbsp;&nbsp; select top 1 voteid from <font color="#f70909">deleted</font></p>
            <table bordercolor="#cccccc" cellspacing="2" cellpadding="3" width="100%" bgcolor="#ffffff" border="1">
                <tbody>
                    <tr>
                        <td></td>
                        <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#3300ff">inserted表</font></td>
                        <td>&nbsp;&nbsp;<font color="#000000">deleted表</font></td>
                    </tr>
                    <tr>
                        <td>insert</td>
                        <td>新插入的行</td>
                        <td>空</td>
                    </tr>
                    <tr>
                        <td>update</td>
                        <td>数据库受到影响的行在更新之后的新值 </td>
                        <td>数据库受到影响的行在更新之前的旧值 </td>
                    </tr>
                    <tr>
                        <td>delete</td>
                        <td>空</td>
                        <td>删除的行</td>
                    </tr>
                </tbody>
            </table>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>当你想自动更新数据库的时候 无论数据库怎样更新,插入新数据也好,自动在后面添加你想添加的东西</p>
            <p><br />
            <font color="#0000ff">create trigger trig_notic_UI<br />
            on notic for insert,update<br />
            as<br />
            update notic set memo=memo+'&lt;dcboy&gt;'<br />
            where id in(select id from inserted) <br />
            go<br />
            <br />
            <br />
            /*<br />
            trig_notic_UI&nbsp;&nbsp; 触发器名称 自定义<br />
            notic 需要触发的表名<br />
            memo 需要更新的字段<br />
            id&nbsp;&nbsp; 是主键<br />
            */</font> </p>
            </span></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1215196.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41781/" target="_blank">[新闻]谷歌生活搜索增加“影讯”</a>]]></description></item><item><title>因为没工作了。所以的复习一下以前的东西。好去面试</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/08/1189054.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Thu, 08 May 2008 14:52:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/08/1189054.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1189054.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/08/1189054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1189054.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1189054.html</trackback:ping><description><![CDATA[<p><font face="Verdana">因为没工作了。所以的复习一下以前的东西。好去面试</font><br />
<br />
先听下&nbsp; <font face="Verdana">于海涛</font>&nbsp; asp.net 教程。并记录一些基础性的东西。<br />
<br />
后续添加。。。</p>
 <img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1189054.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41780/" target="_blank">[新闻]《电脑报》:《星际争霸2》掘金中国悬疑</a>]]></description></item><item><title>SQL Server性能优化</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/03/1180082.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Sat, 03 May 2008 01:38:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/03/1180082.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1180082.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/03/1180082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1180082.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1180082.html</trackback:ping><description><![CDATA[<p><span class="css04"><font size="3"><strong>一、概述</strong> <br />
<br />
在数据库应用中，速度是一个永恒的话题。有许多因素会影响数据库的性能表现，例如：操作系统，硬件方面的因素,如内存和磁盘空间，访问数据库的应用软件。除此之外，数据库本身的设计也是一个影响性能的重要因素。 <br />
<br />
本文要讨论的是我们可以采取哪些措施提高SQL Server数据库的性能。讨论的焦点主要集中在SQL Server 2000为视图创建索引的能力，以及如何使用Index Tuning Wizard（ITW，索引调整向导）优化索引。另外，我们还要讨论如何确保查询充分地利用了索引以及数据库统计信息。 <br />
<br />
性能问题应该在数据库设计的初始阶段就开始考虑。不过，即使在数据库正式开始运行之后，我们仍旧可以进行一些修改，这些修改将显著地影响数据库的性能表现。索引是一种优化数据查询和排序操作的数据库实体，正确配置的索引能够使数据库查询或更新数据所需要的时间发生巨大的变化，ITW能够帮助我们确定如何在数据库中配置索引以获得最佳的性能。 <br />
<br />
我们可以让ITW根据指定的Workload（工作负荷）推荐最佳的数据库索引配置。Workload是保存到外部文件的SQL脚本或跟踪结果。ITW的建议是根据给定Workload而提出的最优化建议，因此事先准备合适的基础数据非常重要。 <br />
<br />
为ITW创建工作负荷文件最简单、最全面的方法或许应该是保存由SQL Profiler创建的跟踪。SQL Profiler是自SQL Server 7.0开始提供的新工具。它能够用指定的过滤器和条件，记录服务器的活动情况。使用SQL Profiler为ITW创建跟踪时，应当确保跟踪已经记录了典型的数据库活动。换句话说，应当选择一个数据库负载不是特别繁重、也不是特别轻松的时段进行跟踪。至于跟踪要运行多少长时间，这由系统本身的特点决定。有些时候，我们可能只需跟踪数小时就可以得到系统典型活动情况的记录；有些时候，我们可能要让跟踪持续几天，才能记录下数据库中所有典型的活动情况。 <br />
<br />
<strong>二、索引调整向导</strong> <br />
<br />
准备好工作负荷文件之后，我们就可以在Enterprise Manager的树形视图中选择服务器启动ITW。从Tools菜单选择Wizards，在树形视图中找到Management节点，选择Index Tuning Wizard，此时我们就可以看到ITW的欢迎屏幕。ITW的第二个屏幕让我们指定要分析的是哪一个服务器和数据库。在这个屏幕上，我们还有另外两个选项：Keep All Existing Indexes（保留现有索引），Perform Thorough Analyses（进行完全分析）。清除Keep All Existing Indexes选项使得ITW能够提出最优索引建议，但此时ITW可能建议删除或者修改现有的某些索引。如果你不想修改现有的索引，请保留这个选项的选中状态。选中Perform Thorough Analyses选项使得ITW进行最广泛、深入的分析。虽然进行完全分析可能提高分析结果的质量，但它一般需要较长的时间才能完成；而且完全分析运行时，它很可能导致服务器负载过重。由于这些原因，如果你需要执行完全分析，那么最好在测试服务器上进行，或者在正式提供服务的机器上，选择一个比较空闲的时段进行。 <br />
<br />
ITW的第三个屏幕让我们指定对哪一个workload进行分析。如果你使用的是SQL Profiler创建的文件，请选择My Workload File选项按钮，然后在文件对话框中找到以前保存的跟踪文件。在这个屏幕中，点击Advanced Options命令按钮可以设置一些高级选项。这些选项包括：被推荐的索引可以使用的最大磁盘空间总量，工作负荷文件中查询取样的最大数量。 <br />
<br />
在第四个屏幕中，我们可以指定ITW应该对哪个或者哪些表的索引提出建议。只选择那些相关的表有利于节省时间，而且它有助于我们把注意力集中到特定的问题之上。不过，如果要让ITW对整个数据库的优化提出建议，我们应该选中数据库里面所有的表。ITW的下一个屏幕根据我们设定的条件，显示出它对索引配置的建议（参见图1）。我们可以选择立即执行它提出的建议，或者计划在以后执行，或者把执行脚本保存到外部文件。 </font><br />
<img onmousewheel="return bbimg(this)" style="zoom: 110%" height="315" src="http://syue.com/data/UploadFiles_5789/200602/20060222023752378.gif" width="406" onload="javascript:resizepic(this)" border="0"  alt="" /></span></p>
<p><span class="css04"><font size="3">图1</ccid_nobr><br />
<br />
ITW不会对主键或者其他唯一性索引提出建议，也不会对系统表的索引提出建议。ITW的其他局限还包括：在给定的工作负荷中，它分析的索引不能超过32767个；不能对SQL Server 6.5或者更早版本创建的数据库提出索引建议。 <br />
<br />
注意，ITW是以用户所提供数据的样本为基础提出索引配置建议。由于这个原因，你可能会发现：如果让ITW对同一个工作负荷分析多次，它可能会提出多种不同的索引配置建议。如果ITW不能提出任何建议，它可能是由于下面两种原因之一造成：第一，与数据库中现有的索引配置方案相比，ITW无法提出任何能够进一步提高性能的索引建议；第二；取样的表里面没有足够的数据，无法确定一个合适的索引配置方案。 <br />
<br />
<strong>三、视图索引</strong> <br />
<br />
SQL Server 2000企业版除了能够创建表的索引，它还能够创建视图的索引。假设我们对Pubs数据库中每一份订单的销售总量感兴趣。下面的代码在Pubs数据库中创建一个名为Quantity_Totals的视图，该视图除了提供上述信息之外，还提供了订单所包含项目的总数： <br />
<br />
<ccid_nobr></font>
<table style="border-collapse: collapse" bordercolor="#000000" cellspacing="0" cellpadding="5" width="80%" bgcolor="#e9e9e9" border="1">
    <tbody>
        <tr>
            <td class="code">Use Pubs GO CREATE VIEW Quantity_Totals with SCHEMABINDING AS SELECT ord_num, Total_Quantity = Sum(qty), Total_Items = Count_Big(*) FROM dbo.sales GROUP BY ord_num</td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
COUNT_BIG是SQL Server 2000提供的一个新函数，它的功能与COUNT函数相同。COUNT_BIG和COUNT的不同之处在于，COUNT_BIG返回值是bigint类型，而COUNT返回值是int类型。任何包含GROUP BY子句的视图，如果要使用索引就必须包含COUNT_BIG函数。我们可以用SCHEMABINDING选项创建包含索引的视图。SCHEMABINDING选项是SQL Server 2000的新功能，如果我们指定了SCHEMABINDING选项，视图将被绑定到其基表的模式。 <br />
<br />
如果视图不包含索引，则数据库中不保存视图返回的结果集。有的时候，我们可能要创建涉及大量记录或必须进行复杂计算的视图，比如要进行聚合分组处理或多重连接操作。如果每次引用这些视图的时候让SQL Server重新生成结果集，数据库开销将非常大。 <br />
<br />
视图的索引与表的索引在作用方式上非常相似。与表一样，视图可以有一个集簇索引（Clustered Index）和多个非集簇索引。然而，在创建任何非集簇索引之前，我们必须先为视图创建一个唯一性的集簇索引。如果我们创建了视图的集簇索引，数据库将永久保存视图的结果集。虽然创建索引时所保存的结果集只反映当时的数据状态，但任何对基表数据的修改都将自动反应到这个结果集之中。 <br />
<br />
就象为表创建索引一样，我们可以用CREATE INDEX命令为视图创建索引： <br />
<br />
<ccid_nobr>
<table style="border-bottom-color: #000000; border-collapse: collapse; border-right-color: #000000" bordercolor="#111111" cellspacing="0" cellpadding="5" width="80%" bgcolor="#e9e9e9" border="1">
    <tbody>
        <tr>
            <td class="code">CREATE UNIQUE CLUSTERED INDEX PRIMARY_IDX on Quantity_Totals(ord_num)</td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
上面的代码为我们前面例子中创建的Quantity_Totals视图创建了一个唯一性的集簇索引。创建视图索引不仅能够提高视图的性能，而且有些时候性能的提高达到出乎意料的程度。一旦我们为视图创建并保存了索引，即使对于那些没有直接在FROM子句中引用该视图的查询，Query Optimizer（查询优化器）也可能选择使用该视图索引来提高查询速度。例如，下面这个SQL命令选择出按照订单编号分组的销售数量累计： <br />
<br />
<ccid_nobr>
<table style="border-bottom-color: #000000; border-collapse: collapse; border-right-color: #000000" bordercolor="#111111" cellspacing="0" cellpadding="5" width="80%" bgcolor="#e9e9e9" border="1">
    <tbody>
        <tr>
            <td class="code">SELECT ord_num, Sum(qty) FROM sales GROUP BY ord_num</td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
执行这个查询时，Query Optimizer知道：在SQL Server为Quantity_Totals视图创建的索引中，这个销售数量的累计值已经存在。在这种情况下，Query Optimizer会作出这样的判断：如果使用为视图创建的索引，查询的效率将有很大的提高。 <br />
<br />
在为视图创建索引之前，你必须检查视图是否满足创建视图索引的各种条件。下表列出了这些条件中的一部分： </p>
<div align="center">
<center><ccid_nobr>
<table style="border-collapse: collapse" bordercolor="#000000" cellspacing="0" cols="2" cellpadding="5" width="80%" border="1" rows="4">
    <tbody>
        <tr align="center" bgcolor="#dbdbdb">
            <td class="code" width="25%">项目</td>
            <td class="code" width="75%">条件</td>
        </tr>
        <tr>
            <td class="code" width="25%">创建视图</td>
            <td class="code" width="75%">创建视图的时候必须指定SCHEMABINDING选项。此外，创建视图时ANSI_NULLS和QUOTED_IDENTIFIER必须设置成ON。</td>
        </tr>
        <tr>
            <td class="code" width="25%">视图引用的表</td>
            <td class="code" bordercolor="#000000" width="75%">被视图引用的表应该与视图在同一个数据库中。创建所有被视图引用的表时，ANSI_NULLS必须设置成ON。视图只能引用基表，不能引用其他视图。</td>
        </tr>
        <tr>
            <td class="code" width="25%">视图的SQL命令</td>
            <td class="code" width="75%">视图所包含的SELECT命令不能使用UNION操作符，不能使用任何子查询。另外，它不能包含DISTINCT和ORDER BY关键词，不能使用MIN、MAX和AVG函数。列必须显式引用，SELECT语句不能用*或者table_name.*的方式引用列。</td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center></div>
<p><br />
<br />
<strong>四、影响查询性能的因素</strong> <br />
<br />
除了数据库的物理设计之外，我们用来保存和提取数据的查询命令的结构也会对性能产生重大影响。内存或者磁盘空间不足之类的硬件问题会降低查询的效率；然而，Query Optimizer不能有效地利用索引或者统计信息也是导致查询性能低劣的主要原因之一。统计信息由关于列里面数据分布情况的信息构成。查询优化器运用统计信息帮助确定执行查询的最优方法。当我们为一个或者多个列创建索引时，SQL Server将自动生成这些索引列的统计数据。默认情况下，SQL Server的Auto Create Statistics数据库选项设置成True。Auto Create Statistics设置成True的结果是，SQL Server同时为表里面的其他列自动生成统计数据。 <br />
<br />
SQL Server除了生成初始的统计信息之外，它还会定期地更新这些信息。更新这些信息的频繁程度，由列和索引数据的变化频繁程度以及列和索引的数据规模决定。大多数时候，无论是生成初始的统计信息还是更新这些统计信息，SQL Server都能够高效地完成，我们无需进行任何手工干预。但是，有些时候我们可能会发现，系统不能顺利地为表生成必需的初始统计信息，或者这些统计信息更新不够及时。 <br />
<br />
我们可以用DBCC SHOW_STATISTICS这个T-SQL命令查看索引列的当前统计信息。这个命令有两个参数，第一个参数指出要查看的是哪一个表的统计信息，第二个参数是索引的名字。例如，如果我们在Query Analyzer（查询分析器）中执行下面这个SQL命令，它将显示出有关Pubs数据库中authors表aunmind索引的统计信息： <br />
<br />
</p>
<ccid_nobr>
<p>
<table style="border-bottom-color: #000000; border-collapse: collapse; border-right-color: #000000" bordercolor="#111111" cellspacing="0" cellpadding="5" width="80%" bgcolor="#e9e9e9" border="1">
    <tbody>
        <tr>
            <td class="code">DBCC SHOW_STATISTICS (authors, aunmind)</td>
        </tr>
    </tbody>
</table>
</p>
</ccid_nobr>
<p><br />
<br />
DBCC SHOW_STATISTICS命令返回的结果中包含了SQL Server最后一次更新统计信息的日期和时间，以及SQL Server用来计算统计信息的采样记录数。 <br />
<br />
<ccid_nobr><img onmousewheel="return bbimg(this)" height="252" src="http://syue.com/data/UploadFiles_5789/200602/20060222023830377.gif" width="397" onload="javascript:resizepic(this)" border="0"  alt="" /></p>
<p>图2</ccid_nobr><br />
<br />
我们可以在Query Analyzer中通过图形用户界面管理非索引列的统计信息，具体操作方法是：启动Query Analyzer，从Tools菜单选择Manage Statistics；在Manage Statistics对话框（图2）中选择要管理哪个数据库以及表或视图的统计信息。 <br />
<br />
Query Analyzer把所有现有的统计信息放入屏幕底部的列表框。选中一个统计项目，点击Delete或Upate按钮就可以删除或者更新统计信息。如果点击New命令按钮，我们将看到Create Statistic对话框。创建新的统计项目时，我们可以选择的参数包括：要包含哪个或者哪些列，SQL Server生成统计信息时从这些列读入取样数据的百分比，是否要求SQL Server在必要时自动更新统计数据。允许SQL Server自动更新统计信息是一种比较好的选择，因为SQL Server通常都能够高效地完成这一任务，而手工完成却非常麻烦。 <br />
<br />
除了用Query Analyzer提供的图形用户界面生成、更新统计数据之外，我们还可以用CREATE STATISTICS和UPDATE STATISTICS这些T-SQL命令来完成同样的任务。 <br />
<br />
<strong>五、查询执行计划</strong> <br />
<br />
要了解查询是否充分利用了索引和统计信息，一种方法是使用Query Analyzer查看查询的执行计划。启动Query Analyzer并装入查询，从Query菜单选择Show Execution Plan、执行查询。在查询结果的下面，我们可以看到一个名为Execution Plan的卡式子窗口。点击Execution Plan即可查看查询的执行计划。另外，在不实际运行查询的情况下，我们也可以查看执行计划，这时的执行计划是&#8220;期望中的执行计划&#8221;。从Query菜单选择Display Expected Execution Plan，我们就可以看到一个图，它描述了一个估计的查询执行计划。这个图显示了Query Optimizer为执行查询已经（或者准备）采取的措施。从各个步骤的详细说明中，我们可以了解哪一个步骤最耗时、哪一个步骤占用资源最多，以及Query Optimizer是否使用了索引。 <br />
<br />
<ccid_nobr><img onmousewheel="return bbimg(this)" height="314" src="http://syue.com/data/UploadFiles_5789/200602/20060222023912909.gif" width="466" onload="javascript:resizepic(this)" border="0"  alt="" /></p>
<p>图3</ccid_nobr><br />
<br />
如果Query Optimizer发现某个表的统计信息已经丢失或者过期，它会把表的标题显示成红色。把鼠标停留到表示表的图标上面，我们就可以从一个弹出式窗口中看到关于该步骤的更多说明，如图3所示。SQL Profiler是一个帮助我们判断哪一个查询导致性能问题并需要进一步分析优化的优秀工具；SQL Profiler能够通过记录服务器的具体活动指出哪些查询和SQL命令效率低下。总而言之，数据库性能优化涉及到相当广泛的问题。单纯地保证系统有正确的索引和统计信息，对于数据库全面优化来说是不够的。然而，它们是能够显著改善数据库响应时间的重要措施。我们只要稍微花上一点时间，就可以利用SQL Server的工具精心调整查询，使得查询能够充分利用索引和统计信息。 <br />
</p>
</span>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1180082.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41779/" target="_blank">[新闻]IBM开发成功22纳米SRAM 更快更节能</a>]]></description></item><item><title>应用Profiler优化SQL Server数据库系统</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/02/1179657.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Fri, 02 May 2008 10:01:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/02/1179657.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1179657.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/05/02/1179657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1179657.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1179657.html</trackback:ping><description><![CDATA[<h1>应用Profiler优化SQL Server数据库系统</h1>
<div class="date">发布日期： 6/28/2005<span class="datePipe"> | </span>更新日期： 6/28/2005</div>
<div class="overview">
<p>作者：苏有全</p>
</div>
<center><img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" /></center>
<div style="height: 18px"></div>
<h5 style="padding-top: 2px">本页内容</h5>
<table style="margin-top: 7px; margin-bottom: 12px" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EKB"><img height="9" alt="概述" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EKB">概述</a></td>
        </tr>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EOB"><img height="9" alt="Profiler trace文件性能分析的传统方法以及局限" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EOB">Profiler trace文件性能分析的传统方法以及局限</a></td>
        </tr>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#E2B"><img height="9" alt="Read80trace工具介绍以及它的Normalization 功能" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#E2B">Read80trace工具介绍以及它的Normalization 功能</a></td>
        </tr>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EQC"><img height="9" alt="使用存储过程分析Normalize后的数据" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EQC">使用存储过程分析Normalize后的数据</a></td>
        </tr>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#ECE"><img height="9" alt="使用usp_GetAccessPattern的一些技巧" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#ECE">使用usp_GetAccessPattern的一些技巧</a></td>
        </tr>
        <tr valign="top">
            <td><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EJE"><img height="9" alt="蛇足：哪个是HOT 数据库？" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" /></a></td>
            <td class="onThisPage"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#EJE">蛇足：哪个是HOT 数据库？</a></td>
        </tr>
    </tbody>
</table>
<a name="EKB"></a>
<h2>概述</h2>
<p>当你的SQL Server数据库系统运行缓慢的时候，你或许多多少少知道可以使用SQL Server Profiler（中文叫SQL事件探查器）工具来进行跟踪和分析。是的，Profiler可以用来捕获发送到SQL Server的所有语句以及语句的执行性能相关数据（如语句的read/writes页面数目，CPU的使用量，以及语句的duration等）以供以后分析。但本文并不介绍如何使用Profiler 工具，而是将介绍如何使用read80trace（有关该工具见后面介绍）工具结合自定义的存储过程来提纲挈领地分析Profiler捕获的Trace文件，最终得出令人兴奋的数据分析报表，从而使你可以高屋建瓴地优化SQL Server数据库系统。</p>
<p>本文对那些需要分析SQL Server大型数据库系统性能的读者如DBA等特别有用。在规模较大、应用逻辑复杂的数据库系统中Profiler产生的文件往往非常巨大，比如说在Profiler中仅仅配置捕获基本的语句事件，运行二小时后捕获的Trace文件就可能有GB级的大小。应用本文介绍的方法不但可以大大节省分析Trace的时间和金钱，把你从Trace文件的海量数据中解放出来，更是让你对数据库系统的访问模式了如指掌，从而知道哪一类语句对性能影响最大，哪类语句需要优化等等。</p>
<div style="margin-top: 3px; margin-bottom: 10px"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /></a><a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top">返回页首</a></div>
<a name="EOB"></a>
<h2>Profiler trace文件性能分析的传统方法以及局限</h2>
<p>先说一下什么是数据库系统的访问模式。除了可以使用Trace文件解决如死锁，阻塞，超时等问题外，最常用也是最主要的功能是可以从Trace文件中得到如下三个非常重要的信息：</p>
<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr valign="top">
            <td class="listNumber" noWrap align="right">
            <p>1.</p>
            </td>
            <td>
            <p>运行最频繁的语句</p>
            </td>
        </tr>
        <tr valign="top">
            <td class="listNumber" noWrap align="right">
            <p>2.</p>
            </td>
            <td>
            <p>最影响系统性能的关键语句</p>
            </td>
        </tr>
        <tr valign="top">
            <td class="listNumber" noWrap align="right">
            <p>3.</p>
            </td>
            <td>
            <p>各类语句群占用的比例以及相关性能统计信息</p>
            </td>
        </tr>
    </tbody>
</table>
<p>本文提到的访问模式就是上面三个信息。我们知道，数据库系统的模块是基本固定的，每个模块访问SQL Server的方式也是差不多固定的，具体到某个菜单，某个按钮，都是基本不变的，所以，在足够长的时间内，访问SQL Server的各类语句及其占用的比例也基本上是固定的。换句话说，只要Profiler采样的时间足够长（我一般运行2小时以上），那么从Trace文件中就肯定可以统计出数据库系统的访问模式。每一个数据库系统都有它自己独一无二的访问模式。分析Profiler Trace文件的一个重要目标就是找出数据库系统的访问模式。一旦得到访问模式，你就可以在优化系统的时候做到胸有成竹，心中了然。可惜直到目前为止还没有任何工具可以方便地得到这些信息。</p>
<p>传统的Trace分析方法有两种。一种是使用Profiler工具本身。比如说可以使用Profiler的Filter功能过滤出那些运行时间超过10秒以上的语句，或按照CPU排序找出最耗费CPU的语句等。另一种是把Trace文件导入到数据库中，然后使用T-SQL语句来进行统计分析。这两种方法对较小的Trace文件是有效的。但是，如果Trace文件数目比较多比较大（如4个500MB以上的trace文件），那么这两种方法就有很大的局限性。其局限性之一是因为文件巨大的原因，分析和统计都非常不易，常常使你无法从全局的高度提纲挈领地掌握所有语句的执行性能。你很容易被一些语句迷惑而把精力耗费在上面，而实际上它却不是真正需要关注的关键语句。局限性之二是你发现尽管很多语句模式都非常类似（仅仅是执行时参数不同），却没有一个简单的方法把他们归类到一起进行统计。简而言之，你无法轻而易举地得到数据库系统的访问模式，无法在优化的时候做到高屋建瓴，纲举目张。这就是传统分析方法的局限性。使用下面介绍的Read80trace工具以及自定义的存储过程可以克服这样的局限性。</p>
<div style="margin-top: 3px; margin-bottom: 10px"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /></a><a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top">返回页首</a></div>
<a name="E2B"></a>
<h2>Read80trace工具介绍以及它的Normalization 功能</h2>
<p>Read80Trace工具是一个命令行工具。使用Read80Trace工具可以大大节省分析Trace文件的时间，有事半功倍的效果。Read80Trace的主要工作原理是读取Trace文件，然后对语句进行<strong>Normalize </strong>(标准化)，导入到数据库，生成性能统计分析的HTML页面。另外，Read80trace可以生成RML文件，然后OSTRESS工具使用RML文件多线程地重放Trace文件中的所有事件。这对于那些想把Profiler捕获的语句在另外一台服务器上重放成为可能。本文不详细介绍Read80trace或OStress工具，有兴趣的读者请自行参阅相关资料，相关软件可以从微软网站下载（注：软件名称为RML，<a href="http://www.microsoft.com/downloads/" target="_blank">http://www.microsoft.com/downloads/</a>）。</p>
<p>我要利用的是Read80Trace的标准化功能。什么是标准化？就是把那些语句模式类似，但参数不一样的语句全部归类到一起。举例说Trace中有几条语句如下：</p>
<pre class="codeSample">select * from authors where au_lname = 'white'
select * from authors where au_lname = 'green'
select * from authors where au_lname = 'carson'
</pre>
<p>经过标准化后，上面的语句就变成如下的样子：</p>
<pre class="codeSample">select * from authors where au_lname = {str}
select * from authors where au_lname = {str}
select * from authors where au_lname = {str}
</pre>
<p>有了标准化后的语句，统计出数据库系统的访问模式就不再是难事。运行Read80trace 的时候我一般使用如下的命令行：</p>
<pre class="codeSample">Read80trace &#8211;f &#8211;dmydb &#8211;Imytrace.trc
</pre>
<p>其中－f开关是不生成RML文件，因为我不需要重放的功能。生成的RML文件比较大，建议读者如果不需要重放的话，也使用－f开关。</p>
<p>－d开关告诉read80trace把trace文件的处理结果存到mydb数据库中。我们后面创建的存储过程正是访问read80trace在mydb中生成的表来进行统计的。－I开关是指定要分析的的trace文件名。Read80trace工具很聪明，如果该目录下有Profiler产生的一系列Trace文件，如mytrace.trc,mytrace1.trc,mytrace2.trc等，那么它会一一顺序读取进行处理。</p>
<p>除了上面介绍的外，Read80trace还有很多其它有趣的开关。比如说使用－i开关使得Read80trace可以从zip或CAB文件中读取trace文件，不用自己解压。所有开关在Read80trace.chm中有详细介绍。我最欣赏的地方是read80trace的性能。分析几个GB大小的trace文件不足一小时就搞定了。我的计算机是一台内存仅为512MB的老机器，有这样的性能我很满意。</p>
<p>你也许会使用read80trace分析压力测试产生的trace文件。我建议还是分析从生产环境中捕获的Trace文件为好。因为很多压力测试工具都不能够真正模拟现实的环境，其得到的trace文件也就不能真实反映实际的情况。甚至有些压力测试工具是循环执行自己写的语句，更不能反映准确的访问模式。建议仅仅把压力测试产生的trace作为参考使用。</p>
<div style="margin-top: 3px; margin-bottom: 10px"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /></a><a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top">返回页首</a></div>
<a name="EQC"></a>
<h2>使用存储过程分析Normalize后的数据</h2>
<p>有了标准化后的语句就可以使用存储过程进行统计分析了。分析的基本思想是把所有模式一样的语句的Reads，CPU和Duration做group by统计，得出访问模式信息：</p>
<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr valign="top">
            <td class="listNumber" noWrap align="right">
            <p>1.</p>
            </td>
            <td>
            <p>某类语句的总共执行次数，平均读页面数（reads）/平均CPU时间/平均执行时间等。</p>
            </td>
        </tr>
        <tr valign="top">
            <td class="listNumber" noWrap align="right">
            <p>2.</p>
            </td>
            <td>
            <p>该类语句在所有语句的比例，如执行次数比例，reads比例，CPU比例等。</p>
            </td>
        </tr>
    </tbody>
</table>
<p>存储过程的定义以及说明如下：</p>
<pre class="codeSample">/*************************************************************/
Create procedure usp_GetAccessPattern 8000
@duration_filter int=-1 --传入的参数，可以按照语句执行的时间过滤统计
as begin
/*首先得到全部语句的性能数据的总和*/
declare @sum_total float,@sum_cpu float,@sum_reads float,@sum_duration float,@sum_writes float
select @sum_total=count(*)*0.01,--这是所有语句的总数。
@sum_cpu=sum(cpu)*0.01, --这是所有语句耗费的CPU时间
@sum_reads=sum(reads)*0.01, --这是所有语句耗费的Reads数目，8K为单位。
@sum_writes=sum(writes)*0.01,--这是所有语句耗费的Writes数目，8K为单位。
@sum_duration=sum(duration)*0.01--这是所有语句的执行时间总和。
from tblBatches --这是Read80Trace产生的表，包括了Trace文件中所有的语句。
where duration&gt;=@duration_filter --是否按照执行时间过滤
/*然后进行Group by，得到某类语句占用的比例*/
Select ltrim(str(count(*))) exec_stats,''+ str(count(*)/@sum_total,4,1)+'%' ExecRatio,
ltrim(str(sum(cpu)))+' : '++ltrim(str(avg(cpu))) cpu_stats,''+str(sum(cpu)/@sum_cpu,4,1)+'%' CpuRatio,
ltrim(str(sum(reads) ))+' : '+ltrim(str(avg(reads) )) reads_stats,''+str(sum(reads)/@sum_reads,4,1)  +'%' ReadsRatio ,
--ltrim(str(sum(writes) ))+' : '+ltrim(str(avg(writes) )) --writes_stats,''+str(sum(writes)/@sum_writes,4,1) +'%)',
ltrim(str(sum(duration) ))+' : '+ltrim(str(avg(duration))) duration_stats,''+str(sum(duration)/@sum_duration,4,1)+'%' DurRatio ,
textdata,count(*)/@sum_total tp,sum(cpu)/@sum_cpu cp,sum(reads)/@sum_reads rp,sum(duration)/@sum_duration dp
into #queries_staticstics from
/* tblUniqueBatches表中存放了所有标准化的语句。*/
(select reads,cpu,duration,writes,convert(varchar(2000),NormText)textdata from tblBatches
inner join tblUniqueBatches on tblBatches.HashId=tblUniqueBatches.hashid where duration&gt;@duration_filter
) B group by textdata --这个group by很重要，它对语句进行归类统计。
print 'Top 10 order by cpu+reads+duration'
select top 10 * from #queries_staticstics order by cp+rp+dp desc
print 'Top 10 order by cpu'
select top 10 * from #queries_staticstics order by cp desc
print 'Top 10 order by reads'
select top 10 * from #queries_staticstics order by rp desc
print 'Top 10 order by duration'
select top 10 * from #queries_staticstics order by dp desc
print 'Top 10 order by batches'
select top 10 * from #queries_staticstics order by tp desc
End
/*************************************************************/
</pre>
<p>考虑到输出结果横向较长，存储过程中把writes去掉了。这是因为大部分的数据库系统都是Reads为主的。你可以轻易的修改存储过程把write也包括进去。</p>
<p>存储过程并不复杂，很容易理解。可以看到统计的结果放在queries_staticstics表中，然后按照不同的条件排序后输出。举例说：</p>
<pre class="codeSample">select top 10 *  from #queries_staticstics order by cp desc
</pre>
<p>上面的语句将把queries_staticstics表中的记录按照某类语句占用总CPU量的比例cp（即sum(cpu)/@sum_cpu）进行排序输出。这让你在分析服务器CPU性能问题的时候快速定位哪一类语句最耗CPU资源，从而对症下药。</p>
<p>现在让我们看一个实例的输出：</p>
<pre class="codeSample">/********************/
Use mydb
Exec usp_GetAccessPattern
/*你可以输入一个执行时间作为过滤参数，毫秒为单位。如usp_GetAccessPattern 1000*/
/********************/
</pre>
<p>输出结果如图 1所示（是部分结果，另外，因为原输出结果横向很长，为方便阅读，把结果从中截断为两部分）：</p>
<img height="281" alt="art/profiler_001.jpg" src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_001.jpg" width="553" border="0" />
<p>图 1：输出结果采样一</p>
<p>上面的例子采样于一家大型公司的业务系统。该系统的问题是应用程序运行缓慢，SQL Server 服务器的CPU高居不下（8个CPU都在90%～100%间波动）。我使用PSSDIAG工具采样2小时左右的数据，然后运行read80trace和usp_GetAccessPattern得出上面的结果。报表一目了然。存储过程DBO.x_DEDUP_PROC在两小时内共运行75次，却占用了90.8％的CPU资源，94.6%的Reads，从访问模式的角度，该存储过程正是导致CPU高和系统性能慢的关键语句。一旦优化了该存储过程，系统的性能问题将迎刃而解。你也许有疑问，两小时内共运行75次,不是很频繁啊。其实你看看这条存储过程的平均CPU时间是681961毫秒，大概11分钟左右。也就是说一个CPU两小时内最多可以执行（60*2）/11＝10条左右，该系统总共有8个CPU，即使全部CPU都用来运行该语句，那么最多也就是10*8＝80条左右。上面执行总数是75，说明该存储过程一直在连续不断地运行。</p>
<p>那么该系统运行最频繁的语句是什么呢？我从结果中摘取另外一部分如下（图 2）：</p>
<img height="281" alt="art/profiler_002.jpg" src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_002.jpg" width="553" border="0" />
<p>图 2：输出结果采样二</p>
<p>从上表可以看出，最频繁运行的语句是</p>
<pre class="codeSample">USE xb SET QUOTED_IDENTIFIER,ANSI_NULL_DFLT_ON&#8230;
</pre>
<p>显然这是一条执行环境配置语句，没有参考价值。倒是另外两条占用语句总数8.2%的语句值得关注：</p>
<pre class="codeSample">SELECT COUNT(*) FROM x_PROCESS_STATS WHERE PROCESS&#8230;&#8230;
SELECT COUNT(*) FROM x_PROCESS_STATS WHERE PROCESS&#8230;&#8230;
</pre>
<p>在这个例子中，因为关键语句DBO.x_DEDUP_PROC非常突出，甚至上面的两条语句都可以忽略了。</p>
<p>让我们再多看一个例子（图 3）：</p>
<img height="312" alt="art/profiler_003.jpg" src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_003.jpg" width="553" border="0" />
<p>图 3：输出结果采样三</p>
<p>从上面的例子中, 可以得出关键的语句是:</p>
<pre class="codeSample">SELECT COUNT(*) FROM GTBL7MS
SELECT CaseNO FROM PATIENTDATA_sum WHERE MRN = @P1
</pre>
<p>后续的检查发现相关的表没有有效的索引，加上索引后性能立即整体地提高了不少.。解决了这两个语句，需要使用同样的手段继续分析和优化，直到系统的性能能够接受为止.。注意性能调优是一个长期的过程，你不太可能一两天就可以把所有的问题都解决。也许一开始可以解决80%的问题，但是后面20%的问题却需要另外80%的时间。</p>
<div style="margin-top: 3px; margin-bottom: 10px"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /></a><a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top">返回页首</a></div>
<a name="ECE"></a>
<h2>使用usp_GetAccessPattern的一些技巧</h2>
<p>usp_GetAccessPattern的输出报表包含了非常丰富的信息。分析报表的时候需要有大局观。你也可以有目的性地选择你需要的信息。如果是CPU性能瓶颈的系统，那么你需要关注CPU占用比例高的那类语句。如果是磁盘IO出现性能瓶颈那么你需要找到那些Reads占用比例大而且平均reads也很高的语句。需要注意的是有时候运行频繁的语句未必就是你需要关注的关键语句。一个最理想的情况是关键语句正好就是最频繁的语句。有时候即使最频繁语句占用的资源比例不高，但如果还可以优化，那么因为放大效应，微小的优化也会给系统带来可观的好处。</p>
<p>在使用usp_GetAccessPattern的时候多结合@duration_filter参数使用。因为参数以毫秒为单位，建议参数不要小于1000，而应该是1000的倍数 如3000，5000等。该参数常常会给出非常有意思的输出。该输出和不带参数运行的结果会有某些重叠。重叠出现的语句通常正是需要关注的语句。要注意运行最多最密的语句未必有超过1000毫秒的执行时间，所有带参数运行的结果有可能不包括最频繁语句。我常常同时交叉分析四个结果，一个是不带参数运行得到的，另三个分别是使用1000，3000和5000毫秒为参数运行的结果。比较分析这四个结果往往使我对数据库系统的访问模式有非常清晰透彻的理解。</p>
<p>运行存储过程时你也许会碰到int整数溢出的错误。这是因为表tblBatches 中的reads,cpu 和writes字段是int而不是bigint。可以运行如下语句进行修正：</p>
<pre class="codeSample">alter table tblBatches  alter column  reads bigint
alter table tblBatches  alter column  cpu bigint
alter table tblBatches  alter column  writes bigint
</pre>
<p>修正后溢出问题就会解决。</p>
<div style="margin-top: 3px; margin-bottom: 10px"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" /></a><a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top">返回页首</a></div>
<a name="EJE"></a>
<h2>蛇足：哪个是HOT 数据库？</h2>
<p>本文到这里就基本上结束了。你已经知道如何使用Read80Trace和usp_GetAccessPattern得到数据库系统的访问模式，以及如何从全局的高度去分析访问模式报表，从而在优化系统的时候做到提纲挈领，胸有成竹。</p>
<p>除此之外，你还可以应用类似的分析思想得到每个数据库的占用资源比例。这对于SQL Server有多个数据库的情况非常有用。从报表中你可以立即知道哪个数据库是最HOT最消耗系统资源的数据库。语句如下：</p>
<pre class="codeSample">print 'group by dbid'
declare @sum_total float,@sum_cpu float,@sum_reads float,@sum_duration float,@sum_writes float
select @sum_total=count(*)*0.01,@sum_cpu=sum(cpu)*0.01,@sum_reads=sum(reads)*0.01,@sum_writes=sum(writes)*0.01,
@sum_duration=sum(duration)*0.01 from tblBatches
select dbid,
ltrim(str(count(*))) exec_stats,''+ str(count(*)/@sum_total,4,1)+'%' ExecRatio,
ltrim(str(sum(cpu)))+' : '++ltrim(str(avg(cpu))) cpu_stats,''+str(sum(cpu)/@sum_cpu,4,1)+'%' CpuRatio ,
ltrim(str(sum(reads) ))+' : '+ltrim(str(avg(reads) )) reads_stats,''+str(sum(reads)/@sum_reads,4,1)  +'%' ReadsRatio ,
ltrim(str(sum(duration) ))+' : '+ltrim(str(avg(duration))) duration_stats,''+str(sum(duration)/@sum_duration,4,1)+'%' DurRatio ,
count(*)/@sum_total tp,sum(cpu)/@sum_cpu cp,sum(reads)/@sum_reads rp,sum(duration)/@sum_duration dp
into #queries_staticstics_groupbydb from
(select reads,cpu,duration,writes,convert(varchar(2000),NormText)textdata,dbid from tblBatches
inner join tblUniqueBatches on tblBatches.HashId=tblUniqueBatches.hashid
) b group by dbid order by sum(reads) desc
select dbid,ExecRatio batches,CPURatio CPU,ReadsRatio Reads,DurRatio Duration
from #queries_staticstics_groupbydb
</pre>
<p>下面是一个上面语句结果的一个例子：</p>
<pre class="codeSample">dbid    batches   CPU        Reads       Duration
------  -------   -----   -------       --------
37      21.1%     18.7%      29.1%       27.1%
33      12.7%     32.4%      19.5%       24.8%
36       5.6%     28.3%      15.6%       26.1%
20      53.9%      2.9%      14.2%        2.1%
22       0.8%      7.2%      13.2%        6.6%
25       1.0%      3.6%       5.4%        3.5%
16       0.0%      1.5%       1.9%        0.7%
35       2.0%      2.7%       1.8%        5.7%
7        0.1%      0.1%       1.1%        0.3%
</pre>
<p>上面的结果明确地告诉我们ID为37，33和36的数据库是最活跃的数据库。一个有趣的事实是数据库20发出的语句总数比例是53.9%，但是其占用的系统资源比例却不高。</p>
 <img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1179657.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41778/" target="_blank">[新闻]Windows 7 Server将被命名为Windows Server 2008 R2</a>]]></description></item><item><title>SQL CASE</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/30/1177177.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Wed, 30 Apr 2008 01:15:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/30/1177177.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1177177.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/30/1177177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1177177.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1177177.html</trackback:ping><description><![CDATA[<p><strong>CASE</strong> 是 SQL 用來做為 if-then-else 之類邏輯的關鍵字。 <strong>CASE</strong> 的語法如下：
</p>
<p><font color="green"><strong>SELECT CASE ("欄位名")<br />
&nbsp; WHEN "條件1" THEN "結果1"<br />
&nbsp; WHEN "條件2" THEN "結果2"<br />
&nbsp; ...<br />
&nbsp; [ELSE "結果N"]<br />
&nbsp; END<br />
FROM "表格名"</strong><br />
</font></p>
<p>"條件" 可以是一個數值或是公式。 <strong>ELSE</strong> 子句則並不是必須的。
</p>
<p>在我們的 <em><strong>Store_Information</strong></em> 中</p>
<p><em><strong>Store_Information</strong></em> 表格<br />
<table class="content" border="1">
    <tbody>
        <tr>
            <td>store_name</td>
            <td>Sales</td>
            <td>Date</td>
        </tr>
        <tr>
            <td>Los Angeles</td>
            <td align="right">$1500</td>
            <td>Jan-05-1999</td>
        </tr>
        <tr>
            <td>San Diego</td>
            <td align="right">$250</td>
            <td>Jan-07-1999</td>
        </tr>
        <tr>
            <td>San Francisco</td>
            <td align="right">$300</td>
            <td>Jan-08-1999</td>
        </tr>
        <tr>
            <td>Boston</td>
            <td align="right">$700</td>
            <td>Jan-08-1999</td>
        </tr>
    </tbody>
</table>
<br />
</p>
<p>若我們要將 'Los Angeles' 的 Sales 數值乘以2，以及將  'San Diego' 的 Sales 數值乘以1.5，我們就鍵入以下的 SQL：
</p>
<p><font color="blue"><strong>SELECT store_name, CASE store_name<br />
&nbsp; WHEN 'Los Angeles' THEN Sales * 2<br />
&nbsp; WHEN 'San Diego' THEN Sales * 1.5<br />
&nbsp; ELSE Sales<br />
&nbsp; END<br />
"New Sales",<br />
Date<br />
FROM Store_Information<br />
</strong></font><br />
</p>
<p>"New Sales" 是用到 <strong>CASE</strong> 那個欄位的欄位名。
</p>
<p><em>結果:</em></p>
<table class="result" border="1">
    <tbody>
        <tr>
            <td>store_name</td>
            <td>New Sales</td>
            <td>Date</td>
        </tr>
        <tr>
            <td>Los Angeles</td>
            <td align="right">$3000</td>
            <td>Jan-05-1999</td>
        </tr>
        <tr>
            <td>San Diego</td>
            <td align="right">$375</td>
            <td>Jan-07-1999</td>
        </tr>
        <tr>
            <td>San Francisco</td>
            <td align="right">$300</td>
            <td>Jan-08-1999</td>
        </tr>
        <tr>
            <td>Boston</td>
            <td align="right">$700</td>
            <td>Jan-08-1999</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1177177.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41775/" target="_blank">[新闻]2008年8月19日IT博客精选</a>]]></description></item><item><title>SQL EXISTS</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1176123.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Tue, 29 Apr 2008 06:11:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1176123.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1176123.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1176123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1176123.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1176123.html</trackback:ping><description><![CDATA[<p>基本上， <strong>EXISTS</strong> 是用來測試內查詢有沒有產生任何結果。如果有的話，系統就會執行外查詢中的 SQL。若是沒有的話，那整個 SQL 語句就不會產生任何結果。
</p>
<p><strong>EXISTS</strong> 的語法是：
</p>
<p><font color="green"><strong>SELECT "欄位1"<br />
FROM "表格1"<br />
WHERE EXISTS <br />
(SELECT * <br />
FROM "表格2"<br />
WHERE [條件])</strong></font></p>
<p>在內查詢中，我們並不一定要用 * 來選出所有的欄位。我們也可以選擇表格2中的任何欄位。這兩種做法最後的結果是一樣的。
</p>
<p>來看一個例子。假設我們有以下的兩個表格：
</p>
<p><em><strong>Store_Information</strong></em> 表格<br />
<table border="1">
    <tbody>
        <tr>
            <td>store_name</td>
            <td>Sales</td>
            <td>Date</td>
        </tr>
        <tr>
            <td>Los Angeles</td>
            <td>$1500</td>
            <td>Jan-05-1999</td>
        </tr>
        <tr>
            <td>San Diego</td>
            <td>$250</td>
            <td>Jan-07-1999</td>
        </tr>
        <tr>
            <td>Los Angeles</td>
            <td>$300</td>
            <td>Jan-08-1999</td>
        </tr>
        <tr>
            <td>Boston</td>
            <td>$700</td>
            <td>Jan-08-1999</td>
        </tr>
    </tbody>
</table>
</p>
<p><em><strong>Geography</strong></em> 表格
<table border="1">
    <tbody>
        <tr>
            <td>region_name</td>
            <td>store_name</td>
        </tr>
        <tr>
            <td>East</td>
            <td>Boston</td>
        </tr>
        <tr>
            <td>East</td>
            <td>New York</td>
        </tr>
        <tr>
            <td>West</td>
            <td>Los Angeles</td>
        </tr>
        <tr>
            <td>West</td>
            <td>San Diego</td>
        </tr>
    </tbody>
</table>
</p>
<p>而我們打入的 SQL 是:
</p>
<p><font color="blue"><strong>SELECT SUM(Sales) FROM Store_Information<br />
WHERE EXISTS<br />
(SELECT * FROM Geography<br />
WHERE region_name = 'West')</strong></font></p>
<p>我們會得到以下的答案：
</p>
<p>
<table border="0">
    <tbody>
        <tr>
            <td><u><font color="royalblue" face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>SUM(Sales)</strong></font></u></td>
        </tr>
        <tr>
            <td><font color="royalblue" face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>2750</strong></font></td>
        </tr>
    </tbody>
</table>
</p>
乍看之下，這個答案似乎不太正確，因為內查詢有包含一個 [region_name = 'West'] 的條件，可是最後的答案並沒有包含這個條件。實際上，這並沒有問題。在這個例子中，內查詢產生了超過一筆的資料，所以 <strong>EXISTS</strong> 的條件成立，所以外查詢被執行。而外查詢本身並沒有包含 [region_name = 'West'] 這個條件。
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1176123.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41774/" target="_blank">[新闻]Facebook成为美国四大电视台争夺观众阵地</a>]]></description></item><item><title>SQL 刪除相同的記錄</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1175898.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Tue, 29 Apr 2008 03:54:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1175898.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1175898.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/29/1175898.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1175898.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1175898.html</trackback:ping><description><![CDATA[問：<br />
在sqlserver一个表中，有id，name，xm三个字段，共10条记录，记录的id值有重复，但是name，xm没有重复的，现在想将id重复的记录只保留一条，如何写sql语句？？<br />
答：<br />
删除重复数据 &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; 一、具有主键的情况 &nbsp; <br />
&nbsp; a.具有唯一性的字段id(为唯一主键) &nbsp; <br />
&nbsp; delect &nbsp; table &nbsp;  &nbsp; <br />
&nbsp; where &nbsp; id &nbsp; not &nbsp; in &nbsp;  &nbsp; <br />
&nbsp; ( &nbsp; <br />
&nbsp; select &nbsp; max(id) &nbsp; from &nbsp; table &nbsp; group &nbsp; by &nbsp; col1,col2,col3... &nbsp; <br />
&nbsp; ) &nbsp; <br />
&nbsp; group &nbsp; by &nbsp; 子句后跟的字段就是你用来判断重复的条件，如只有col1， &nbsp; <br />
&nbsp; 那么只要col1字段内容相同即表示记录相同。 &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; b.具有联合主键 &nbsp; <br />
&nbsp; 假设col1+','+col2+','...col5 &nbsp; 为联合主键 &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; from &nbsp;  &nbsp; table &nbsp; where &nbsp; col1+','+col2+','...col5 &nbsp; in &nbsp; ( &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; select &nbsp; max(col1+','+col2+','...col5) &nbsp; from &nbsp; table &nbsp;  &nbsp; <br />
&nbsp; where &nbsp; having &nbsp; count(*)&gt;1 &nbsp; <br />
&nbsp; group &nbsp; by &nbsp; col1,col2,col3,col4 &nbsp;  &nbsp; <br />
&nbsp; ) &nbsp; <br />
&nbsp; group &nbsp; by &nbsp; 子句后跟的字段就是你用来判断重复的条件， &nbsp; <br />
&nbsp; 如只有col1，那么只要col1字段内容相同即表示记录相同。 &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; or &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; from &nbsp; table &nbsp;  &nbsp; where &nbsp; exists &nbsp; (select &nbsp; 1 &nbsp; from &nbsp; table &nbsp; x &nbsp; where &nbsp; table.col1 &nbsp; = &nbsp; x.col1 &nbsp; and &nbsp;  &nbsp; <br />
&nbsp; table.col2= &nbsp; x.col2 &nbsp; group &nbsp; by &nbsp; x.col1,x.col2 &nbsp; having &nbsp; count(*) &nbsp; &gt;1) &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; c:判断所有的字段 &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; select &nbsp; * &nbsp; into &nbsp; #aa &nbsp; from &nbsp; table &nbsp; group &nbsp; by &nbsp; id1,id2,.... &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; delete &nbsp; table &nbsp;  &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; insert &nbsp; into &nbsp; table &nbsp;  &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; select &nbsp; * &nbsp; from &nbsp; #aa &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; 二、没有主键的情况 &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; a:用临时表实现 &nbsp; <br />
&nbsp; select &nbsp; identity(int,1,1) &nbsp; as &nbsp; id,* &nbsp; into &nbsp; #temp &nbsp; from &nbsp; ta &nbsp; <br />
&nbsp; delect &nbsp; #temp &nbsp;  &nbsp; <br />
&nbsp; where &nbsp; id &nbsp; not &nbsp; in &nbsp;  &nbsp; <br />
&nbsp; ( &nbsp; <br />
&nbsp;  &nbsp;  &nbsp; select &nbsp; max(id) &nbsp; from &nbsp; # &nbsp; group &nbsp; by &nbsp; col1,col2,col3... &nbsp; <br />
&nbsp; ) &nbsp; <br />
&nbsp; delete &nbsp; table &nbsp; ta &nbsp; <br />
&nbsp; inset &nbsp; into &nbsp; ta(...) &nbsp; <br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; select &nbsp; ..... &nbsp; from &nbsp; #temp &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; b:用改变表结构（加一个唯一字段）来实现 &nbsp; <br />
&nbsp; alter &nbsp; table &nbsp; 表 &nbsp; add &nbsp;  &nbsp; newfield &nbsp; int &nbsp; identity(1,1) &nbsp; <br />
&nbsp; delete &nbsp; 表 &nbsp; <br />
&nbsp; where &nbsp; newfield &nbsp; not &nbsp; in &nbsp; <br />
&nbsp; ( &nbsp; <br />
&nbsp; select &nbsp; min(newfield) &nbsp; from &nbsp; 表 &nbsp; group &nbsp; by &nbsp; 除newfield外的所有字段 &nbsp; <br />
&nbsp; ) &nbsp; <br />
&nbsp;  &nbsp; <br />
&nbsp; alter &nbsp; table &nbsp; 表 &nbsp; drop &nbsp; column &nbsp; newfield &nbsp; <br />
<br />
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1175898.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41774/" target="_blank">[新闻]Facebook成为美国四大电视台争夺观众阵地</a>]]></description></item><item><title>SQL left,RIGHT,CHARINDEX 使用示例</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/26/1172107.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Sat, 26 Apr 2008 05:38:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/26/1172107.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1172107.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/26/1172107.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1172107.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1172107.html</trackback:ping><description><![CDATA[問：<br />
表結構：<br />
name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; company&nbsp;&nbsp;&nbsp; company_address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
---------- ---------- -------------------- -------------------- <br />
Joe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Work&nbsp;&nbsp; Lane&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abc.com;xyz.com <br />
Jill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XYZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Job&nbsp;&nbsp; Street&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abc.com;xyz.com <br />
寫一個存儲過程等到如下的結果：<br />
name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; company&nbsp;&nbsp;&nbsp; company_address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
---------- ---------- -------------------- -------------------- <br />
Jill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XYZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Job&nbsp;&nbsp; Street&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abc.com<br />
Jill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XYZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Job&nbsp;&nbsp; Street&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xyz.com <br />
Joe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Work&nbsp;&nbsp; Lane&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xyz.com <br />
Joe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ABC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Work&nbsp;&nbsp; Lane&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abc.com<br />
答：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">drop</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users1<br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users1&nbsp;&nbsp;&nbsp;(name&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">),company&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">),company_address&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">),url1&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">varchar</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">))<br />
</span><span style="color: #0000ff;">insert</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users1<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Joe&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">ABC&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Work&nbsp;&nbsp;&nbsp;Lane&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">abc.com;xyz.com&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">union</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">all</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Jill&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">XYZ&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Job&nbsp;&nbsp;&nbsp;Street&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">abc.com;xyz.com&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">drop</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">proc</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;up_test<br />
</span><span style="color: #0000ff;">go</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">create</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">proc</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;up_test<br />
</span><span style="color: #0000ff;">as</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">exists</span><span style="color: #000000;">(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;sysobjects&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;type</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">U&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">and</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;name</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">users2&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">drop</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">table</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users2<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">into</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users2&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;(<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">name</span><span style="color: #ff0000;">]</span><span style="color: #000000;">,company,company_address,</span><span style="color: #808080;">left</span><span style="color: #000000;">(url1,</span><span style="color: #ff00ff;">charindex</span><span style="color: #000000;">(&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,url1)</span><span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">as</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;url1<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users1<br />
</span><span style="color: #0000ff;">union</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">all</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">name</span><span style="color: #ff0000;">]</span><span style="color: #000000;">,company,company_address,</span><span style="color: #808080;">right</span><span style="color: #000000;">(url1,</span><span style="color: #ff00ff;">len</span><span style="color: #000000;">(url1)</span><span style="color: #808080;">-</span><span style="color: #ff00ff;">charindex</span><span style="color: #000000;">(&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">;</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,url1)</span><span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">)&nbsp;&nbsp;</span><span style="color: #0000ff;">as</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;url1<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users1)&nbsp;t<br />
</span><span style="color: #0000ff;">order</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">by</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;t.name,t.company,t.company_address<br />
</span><span style="color: #0000ff;">GO</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">exec</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;up_test<br />
</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;users2</span></div>
<br />
<br />
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1172107.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41773/" target="_blank">[新闻]商业周刊：Twitter创收难 或被收购</a>]]></description></item><item><title>80048820</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/22/1165027.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Tue, 22 Apr 2008 01:31:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/22/1165027.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1165027.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/22/1165027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1165027.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1165027.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" width="623" border="0">
    <tbody>
        <tr>
            <td valign="top" width="623" background="images/detail_03.gif" height="52">
            <table cellspacing="0" cellpadding="0" width="100%" border="0">
                <tbody>
                    <tr>
                        <td width="93%">
                        <table height="24" cellspacing="0" cellpadding="0" width="547" border="0">
                            <tbody>
                                <tr>
                                    <td background="images/detail110.gif" colspan="4">
                                    <div align="left"><span class="redcolor"><strong>msn 80048820 错误处理方法一</strong></span></div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td valign="top">
            <link href="css.css" type="text/css" rel="stylesheet" />
            <form name="fsdspage" action="#" method="post">
                <table width="100%" border="0">
                    <tbody>
                        <tr class="neirong">
                            <td noWrap align="left" width="30%">总页数：<font color="#ff3333">1</font>页 当前第<font color="#ff3333">1</font>页</td>
                            <td noWrap align="right" width="70%">
                            <div align="right">首页|前页|后页|末页 </div>
                            </td>
                            <td noWrap width="193">转到第 <input style="background: #d3d3d3"  disabled readOnly size="3" name="PageNo"  type="text" /> 页 </td>
                        </tr>
                    </tbody>
                </table>
            </form>
            <table cellspacing="0" cellpadding="0" width="623" border="0">
                <tbody>
                    <tr>
                        <td colspan="3">&nbsp; </td>
                    </tr>
                    <tr>
                        <td rowspan="2">&nbsp; </td>
                        <td class="neirong" valign="top" width="529" background="images/main_03.gif">
                        <div align="left"><!-- 这里是查询出来的内容-->
                        <p>&nbsp;</p>
                        <p>&nbsp;</p>
                        <p>msn 80048820 erro <span class="copyctrl" style="font-size: 0pt">泓t浔栟 </span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> d舑鲀篔V?</span>&nbsp;<br />
                        这几天一直无法登陆msn，郁闷<span class="copyctrl" style="font-size: 0pt"> ?0?拼(@" </span>&nbsp;<br />
                        每次登录都会提示80048820错误，但msn软件的错误提示是代理或防火墙设置的问题，但该检查的错误都检查了，还是无法解决问题，于是上网搜索，最后终于解决了问题<span class="copyctrl" style="font-size: 0pt"> G襮?w??</span>&nbsp;</p>
                        <p><strong>本人先在这儿作申明:我处理办法是,从添加/删除 程序中删除MSN,删除相关数据(C:\Documents and Settings\[用户名]\Application Data\Microsoft\MSN Messenger 下会为每个登录过MSN Messenger的用户创建一个文件夹，把该文件夹删除。（其中的用户名是指你登陆操作系统的用户名）),然后从网站重新下载新版MSN程序,重新安装.就可以解决了!</strong></p>
                        <p><br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> 灳^ɡ禞a? </span>&nbsp;<br />
                        80048820官方解释：<span class="copyctrl" style="font-size: 0pt"> 鋯&amp;}峵蚈h </span>&nbsp;<br />
                        When you start MSN Messenger you cannot sign in, and you get the message:</p>
                        <p>Sorry, we were unable to sign you in to the MSN Messenger at this time. Please try again later. </p>
                        <p>To let us try and troubleshoot the problem, click the Troubleshoot button. </p>
                        <p>80048820 </p>
                        <p>Fix this error / possible solutionThis error seems to indicate a problem with MSN Messenger&#8217;s encryption routines. <span class="copyctrl" style="font-size: 0pt">W玙 蟩绨Y </span>&nbsp;<br />
                        The usual cause is that the time on your computer is not correct. <span class="copyctrl" style="font-size: 0pt">B?F)u歡 </span>&nbsp;<br />
                        To correct the time on your computer, double-click the clock in the bottom right of your screen, in the window that appears you should check both the time and date. <span class="copyctrl" style="font-size: 0pt">Z恕続悇GX </span>&nbsp;<br />
                        If you use Windows XP, you can automatically correct the time by clicking the "Internet Time" tab, next click the "Update Now" button. <span class="copyctrl" style="font-size: 0pt">衦|H Z?P?</span>&nbsp;<br />
                        If you still have problems connecting with the time adjusted, try to run this file. This will make<span class="copyctrl" style="font-size: 0pt"> 譤貛5? - </span>&nbsp;<br />
                        &nbsp;sure MSN Messenger can find all the files it needs on your computer. <span class="copyctrl" style="font-size: 0pt">?buf宇5莱 </span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> 儖9匣?O?</span>&nbsp;<br />
                        大致说的是这个问题是因为系统时间错误导致，如果修改系统时间后问题还未解决，则运行<a href="http://www.msn-problems.com/downloads/register-messenger-dll-files.bat"><a href="http://www.msn-problems.com/downloads/register-messenger-dll-files.bat" target="_blank">http://www.msn-problems.com/downloads/register-messenger-dll-files.bat</a></a> 文件，确认DLL文件注册信息是否丢失或者msn运行需要的文件缺失。<span class="copyctrl" style="font-size: 0pt"> ?J鉅Q?</span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> ????嶻 </span>&nbsp;<br />
                        不过我的系统时间是没有问题的，后面又看了一个帖子，觉得应该是自己的dll注册信息丢了，不过文章提供的bat文件现在已经无法下载，狂FT，最后报着试试看的心思把系统时间提前了3天，运行msn，登陆，成功！！！！！<span class="copyctrl" style="font-size: 0pt"> 巖LC?/€p </span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> ?~V&lt;媳y?</span>&nbsp;<br />
                        看来80048820错误没错和系统时间有关，但不是说一定就是你的系统时间有错，另外在一位网友的blog中（<a href="http://spaces.msn.com/members/davy-cn/"><a href="http://spaces.msn.com/members/davy-cn/" target="_blank">http://spaces.msn.com/members/davy-cn/</a></a>&nbsp;&nbsp; 游乐者）也有对这个问题的记录：<span class="copyctrl" style="font-size: 0pt"> ＺY?? m </span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> 埂 坛?#? </span>&nbsp;<br />
                        80048820错误是MSN7.5的一个BUG,所有删除过MSN Explorer或者调整时间日期的都会出现。 </p>
                        <p>在WINDOWS的"开始"菜单下选择"运行",然后依次键入:&nbsp; </p>
                        <p>regsvr32 softpub.dll 回车 </p>
                        <p>regsvr32 mssip32.dll 回车 </p>
                        <p>regsvr32 intippki.dll 回车 <span class="copyctrl" style="font-size: 0pt">奉朄4? </span>&nbsp;<br />
                        &nbsp;<span class="copyctrl" style="font-size: 0pt"> 鎗瞑対鯲礷 </span>&nbsp;<br />
                        本人在处理这个问题时regsvr32 intippki.dll执行结果是&#8220;找不到指定的模块&#8221;（所以之前也判断自己的问题是dll缺失，不过最后问题竟然还是通过系统时间解决，也是很诡异的事情） <span class="copyctrl" style="font-size: 0pt">％筕&amp;/款R </span>&nbsp;<br />
                        </p>
                        </div>
                        </td>
                        <td>&nbsp; </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1165027.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41772/" target="_blank">[新闻]奇虎360安全卫士负责人傅盛正式离职</a>]]></description></item><item><title>奇怪的问题。</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1150723.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Sat, 12 Apr 2008 14:02:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1150723.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1150723.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1150723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1150723.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1150723.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">="280"</span><span style="color: #ff0000">&nbsp;border</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;cellspacing</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;cellpadding</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="background-color:&nbsp;#649503;"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">img&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="http://www.guwenlvshi.com/MyFiles/20061012207271535.gif"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">="280"</span><span style="color: #ff0000">&nbsp;border</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;cellspacing</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;cellpadding</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="background-color:&nbsp;#649503;"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">img&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="http://www.guwenlvshi.com/MyFiles/20061012207271535.gif"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
上面二段代码什么都相同。不同之处是一个是10行一个是11行。请看第6行。在下面给它分成二行了。<br />
问题出来了。<br />
请问他们的运行效果相同否（在IE6.0下。）<br />
如果知道答案的。请将相关的说明文档留言一下。谢谢。
 <img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1150723.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41771/" target="_blank">[新闻]土豆网首页全新改版 用户将获得更高权限</a>]]></description></item><item><title>如何在 Windows 2000 中提升和降级域控制器</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1149884.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Sat, 12 Apr 2008 00:47:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1149884.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1149884.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1149884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1149884.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1149884.html</trackback:ping><description><![CDATA[摘要: 如何在 Windows 2000 中提升和降级域控制器察看本文应用于的产品function loadTOCNode(){} 文章编号 : 238369 最后修改 : 2005年4月13日 修订 : 3.0 本文的发布号曾为 CHS238369本页概要在新目录林中安装第一个域控制器在现有目录林中安装第一个域控制器在新子域中安装第一个域控制器为现有域安装额外域控制器从域控制器中删除 Active Di&nbsp;&nbsp;<a href='http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/12/1149884.html'>阅读全文</a><img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1149884.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41771/" target="_blank">[新闻]土豆网首页全新改版 用户将获得更高权限</a>]]></description></item><item><title>Microsoft.Exchange.OMA.PreferencingServerResources.Resources.dll.EN</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/09/1144277.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Wed, 09 Apr 2008 02:55:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/09/1144277.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1144277.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/09/1144277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1144277.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1144277.html</trackback:ping><description><![CDATA[<p>&nbsp;今天在安裝&nbsp; exchange 2003 的時候。提示復制錯誤。。<font face="Verdana">Microsoft.Exchange.OMA.PreferencingServerResources.Resources.dll.EN</font><br />
找不到該文件。<br />
<br />
<br />
解決方案：<br />
<font face="Verdana">&nbsp; 打開&nbsp;&nbsp;&nbsp; \exchange2003\setup\i386\exchange\oma\Browse\bin\EN&nbsp;&nbsp;&nbsp;&nbsp; 到該目錄下找到<br />
<font face="Verdana">Microsoft.Exchange.OMA.PreferencingServerResources.Resources..EN<br />
該文件<br />
講它修改成<br />
<font face="Verdana">Microsoft.Exchange.OMA.PreferencingServerResources.Resources.dll.EN</font><br />
&nbsp; 即可。。<br />
</font></font></p>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1144277.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41770/" target="_blank">[新闻]WordPress 2008 年发展迅猛</a>]]></description></item><item><title>指定的網域的名稱或安全性識別碼（用磁碟映像檔部署的電腦無法加入AD網域 ）</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/08/1141972.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Tue, 08 Apr 2008 03:44:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/08/1141972.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1141972.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/08/1141972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1141972.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1141972.html</trackback:ping><description><![CDATA[<p align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/zhaoxiaoyang/119909/r_2008040800.JPG" border="0" /><br />
</p>
<div>解決方案 <br />
<table class="dataTable" id="EFFAC" cellspacing="0" cellpadding="0">
    <tbody>
        <tr class="record" valign="top">
            <td>
            <p class="lastInCell">548</p>
            </td>
            <td style="border-right: #cccccc 1px solid">
            <p class="lastInCell">登入失敗。得自信任網域的安全性識別元 (SID) 與用戶端的帳戶網域 SID 不相符。</p>
            </td>
        </tr>
    </tbody>
</table>
<table class="Bpadd" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="text20">用磁碟映像檔部署的電腦無法加入AD網域 </td>
        </tr>
        <tr>
            <td class="text12" align="right"><font class="text12" color="#6f6f6f">文/<a href="http://www.ithome.com.tw/">張明德</a> (記者) 2007-07-05 <br />
            <br />
            </font></td>
        </tr>
        <tr>
            <td class="text13b"><!-- NO MAIN PHOTO -->使用Ghost等系統備份軟體擷取已完成系統與應用程式安裝的電腦磁碟映像（Disk Image），再把磁碟映像部署到其他電腦時，為什麼新建好的系統無法加入AD網域？ <br />
            <br />
            </td>
        </tr>
        <tr>
            <td class="text20"></td>
        </tr>
        <tr>
            <td class="text15">利用已安裝好作業系統與應用程式的磁碟映像，是在大量電腦上部署軟體的簡便方法，由於複製內含系統的磁碟整個磁區，要比逐一複製檔案快速許多，因此使用者可免除完整安裝系統所耗費的大量時間。 <br />
            <br />
            但問題是每個複製出來的系統，都會具有與作為磁碟映像範本系統相同的電腦安全識別碼（Security Identifier，SID），在登入AD網域時，會出現「指定網域的名稱或安全性識別碼（SID）與該網域的信任資訊不一致。」的錯誤，相同SID在登入網域時將發生衝突，以致被AD伺服器阻擋。 <br />
            <br />
            由於AD網域指認可唯一的SID，因此這個問題必須透過修改SID才能解決。但SID並不會隨著電腦或加入網域名稱的更改而變，故須使用特定工具程式，常用解決方式有兩種： <br />
            <br />
            1.從Windows安裝片中找出\Support\Tools\Deploy.cab檔案，然後解壓縮出Sysprep.exe與setupcl程式並執行重新封裝，即可為該電腦產生新的SID，並登入網域。 <br />
            <br />
            <table id="AutoNumber1" style="border-collapse: collapse" bordercolor="#ffffff" cellspacing="1" width="380" border="1">
                <tbody>
                    <tr>
                        <td width="100%">
                        <p><img height="386" src="http://www.ithome.com.tw/img/88/44195_1_2_l.jpg" width="377" border="0"  alt="" /></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="100%"><font color="#808080" size="2">從Windows光碟片中找出\Support\Tools\Deploy.cab檔案，解壓縮出Sysprep.exe與setupcl程式，執行重新封裝選項。</font></td>
                    </tr>
                </tbody>
            </table>
            <br />
            2.由於使用Sysprep重新封裝系統需耗費較多的時間，必要時還需輸入產品序號，使用上相當不方便，因此亦可使用專門的SID修改工具，如Sysinternals免費提供的NewSID直接更改系統的SID。 <br />
            <br />
            此工具程式可由<a href="http://www.microsoft.com/technet/sysinternals/Security/NewSid.mspx" target="_blank">此處下載</a>，NewSID最新版本為v4.10，可支援Windows NT/2000/XP與 Server 2003。NewSID 需要系統管理權限才能執行，具備變更電腦SID和電腦名稱的功能。NewSID會先為電腦產生隨機的SID，接著在系統登錄檔中找到的既有電腦的SID，並以新產生的SID取代。 <br />
            <br />
            除Windows內附的Sysprep與免費的NewSID外，Symantec的SID Changer與Ghost Walker也都可以用來更改SID，不過這兩個程式都是需付費的商用軟體。 <br />
            <br />
            除了利用磁碟映像部署作業系統時會遭遇SID問題外，在使用虛擬機器（VM）由一個安裝完成做系統的VM複製出多個新VM時，也會遇到相同的SID問題，亦可使用前述方法解決。文⊙張明德 <br />
            <br />
            <table id="AutoNumber1" style="border-collapse: collapse" bordercolor="#111111" cellspacing="0" cellpadding="0" width="100%" border="0">
                <tbody>
                    <tr>
                        <td width="100%" bgcolor="#c0c0c0">
                        <p align="center"><font color="#ffffff" size="2"><strong>名詞解釋－SID</strong></font></p>
                        </td>
                    </tr>
                    <tr>
                        <td width="100%"><font size="2">SID是安全識別碼的縮寫，為微軟作業系統指定給網域或本機電腦帳戶之唯一識別碼。在新帳戶建立時，系統即會依據電腦名稱、當前時間等參數賦予一個唯一的SID。
                        <p>NT/2000以後的微軟作業系統都是透過SID來識別帳戶身分，且SID不隨帳號名稱而變，即使把系統管理員的帳號改為別的名稱，系統仍可依據SID識別出此帳號是具有系統管理權限的帳戶。即使帳戶名稱相同，但SID仍不同，故作業系統不會混淆。就像每個人一出生去登記戶口時即會得到一個身分證字號，此後更改姓名不會造成身分證字號的更動，或同名同姓的兩個人不會有相同身分證字號一樣</p>
                        <p>網路中若有兩臺電腦或兩個帳戶的SID重複時，則系統會把這兩個帳號視為同一個，並給與相同的存取權限，會產生嚴重的安全問題，故AD網域不允許相同SID的電腦加入。</font></p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<!--內文 end--><!--分頁 start--><!--分頁 end--><!--內文文章 end--><!--中間分欄 end--><!-- TAG : CENTER-CENTER END --><br />
</div>
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1141972.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41769/" target="_blank">[新闻]百度娱乐访上线 打造网友明星实时互动平台</a>]]></description></item><item><title>Microsoft.NET框架程序设计(修订版)  下载地址</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/03/1135781.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Thu, 03 Apr 2008 02:23:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/03/1135781.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1135781.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/03/1135781.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1135781.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxiaoyang/services/trackbacks/1135781.html</trackback:ping><description><![CDATA[<a href="http://dl2.csdn.net/down1/20070716/16154100114.rar">Microsoft.NET框架程序设计(修订版).part2 </a><br />
<a href="http://dl2.csdn.net/down1/20070716/16153813439.rar">Microsoft.NET框架程序设计(修订版).part1</a><br />
<font face="Verdana"><a href="http://dl2.csdn.net/down1/20070716/16154340353.rar"><font face="Verdana">Microsoft.NET框架程序设计(修订版).part3</font></a></font><br />
<a href="http://dl2.csdn.net/down1/20070716/16154533324.rar">Microsoft.NET框架程序设计(修订版).part4 </a><br />
<br />
以上是PDG版&nbsp; <a href="http://dl2.csdn.net/down1/20080109/09225015348.rar">pdg查看器下载<br />
<br />
<br />
<br />
</a><a href="http://soft.jz123.cn/jz123abc212335/SSR38B0707.exe">超星浏览器3.8下载地址 </a><br />
<br />
<br />
<br />
<br />
<a href="http://dl1.csdn.net/down1/2006/webdown/004/2005110117111226960.pdf">net框架程序设计_中文版&nbsp;&nbsp; （pdf版）</a><a href="http://dl2.csdn.net/down1/20070716/16154533324.rar"><br />
</a><br />
pdg 比pdf清晰许多。。但是没有PDF查看方便。嘿嘿。 <br />
<br />
<span style="display: block; font-size: 12px; margin: 5px 0px 0px"><span class="qqmailbgattach" style="font-weight: bold" expiretime="1207809950" downloadlink="http://mail.qq.com/cgi-bin/exs_download?uin=113605767&amp;svrid=34&amp;fid=692efab579d5e588e6987fbd5b2f4a7fbfabc3aebf435515&amp;temp=b2a0decc&amp;uploadendtime=1207205150&amp;code=b2a0decc&amp;subtmpl=email">Microsoft.NET框架程序设计(修订版).pdf<span style="font-weight: normal"> (40.16MB)</span> <wbr><wbr></span>[<a href="http://exs.mail.qq.com/cgi-bin/downloadfilepart/svrid34/Microsoft.NET%BF%F2%BC%DC%B3%CC%D0%F2%C9%E8%BC%C6(%D0%DE%B6%A9%B0%E6).pdf?svrid=34&amp;fid=692efab579d5e588e6987fbd5b2f4a7fbfabc3aebf435515&amp;&amp;txf_fid=d69d4979e8d5167e16617981d71b4328f4d09db6&amp;&amp;txf_sid=f38fd6a91316dba5b38d5f4092b555886aeeb46b">下载</a>]&nbsp; <span style="color: #909090">(有效时间到: 2008年7月17日 下午 02:45)</span><font face="Verdana">&nbsp;&nbsp;&nbsp;<span style="color: red; background-color: #ffffff">&nbsp;(PDF<font face="Verdana">清晰版</font>)<br />
</span></font></span>提取码：<span id="downloadCode">b2a0decc</span> <br />
下面的是 纳米下载<br />
<a href="http://www.namipan.com/d/Microsoft.NET%E6%A1%86%E6%9E%B6%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%28%E4%BF%AE%E8%AE%A2%E7%89%88%29%28%E6%B8%85%E6%99%B0%E7%89%88%29.rar/d93787d5f46652d7011f2910f14b598f1dda6323eb225102">Microsoft.NET框架程序设计(修订版)(清晰版).rar</a> 解压密码是：<font face="Verdana">www.guwenlvshi.com</font><br />
不能下载的话。请直接点击到<a href="http://www.namipan.com/d/Microsoft.NET%E6%A1%86%E6%9E%B6%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%28%E4%BF%AE%E8%AE%A2%E7%89%88%29%28%E6%B8%85%E6%99%B0%E7%89%88%29.rar/d93787d5f46652d7011f2910f14b598f1dda6323eb225102">下载页面</a>进行下载 
<img src ="http://www.cnblogs.com/zhaoxiaoyang/aggbug/1135781.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41767/" target="_blank">[新闻]美18岁女生创办网站成亿万富豪</a>]]></description></item><item><title>将这个字段中所有含‘北京’的替换成'上海'</title><link>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/01/1132970.html</link><dc:creator>破曉之陽</dc:creator><author>破曉之陽</author><pubDate>Tue, 01 Apr 2008 07:27:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/01/1132970.html</guid><wfw:comment>http://www.cnblogs.com/zhaoxiaoyang/comments/1132970.html</wfw:comment><comments>http://www.cnblogs.com/zhaoxiaoyang/archive/2008/04/01/1132970.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhaoxiaoyang/comments/commentRss/1132970.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhaoxi