<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[wind - 数据库]]></title>
<link>http://feng.kiyeer.net/</link>
<description><![CDATA[创造机会的人是勇者；等待机会的人是愚者]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yong8868@163.com(wind)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>wind</title>
	<url>http://feng.kiyeer.net/images/logos.gif</url>
	<link>http://feng.kiyeer.net/</link>
	<description>wind</description>
</image>

			<item>
			<link>http://feng.kiyeer.net/article.asp?id=406</link>
			<title><![CDATA[终于搞清楚了ADO数据库连接中的Persist Security Info参数的作用]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,14 Oct 2009 17:05:20 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=406</guid>
		<description><![CDATA[每次用向导创建ADO的数据库连接字符串时总会有产生一个Persist Security Info属性，平时没太注意，因为设置为True或False时对数据库连接没有任何影响。不过心理还是不爽，今天有时间查询了一下资料，总算搞清楚了它的作用。<br/><br/>Persist Security Info属性的意思是表示是否保存安全信息，其实可以简单的理解为&#34;ADO在数据库连接成功后是否保存密码信息&#34;，<br/><br/>True表示保存，False表示不保存<br/><br/>ADO缺省为True<br/>(ADO.net缺省为False，未测试，根据参考资料上说的)<br/><br/>具体可以通过ADO的Connect对象的ConnectString属性进行验证，如下所示(以下在Delphi7中测试通过)：<br/><br/>----------------------------------------------------------------------------------------------------------<br/><br/>数据库连接前<br/><br/>ConnectString=&#34;Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=false&#34;<br/><br/>数据库连接成功后<br/><br/>ConnectString=&#34;Provider=MSDAORA.1;User ID=yzs;Data Source=ydgl22&#34;<br/><br/>----------------------------------------------------------------------------------------------------------<br/><br/>数据库连接前<br/><br/>ConnectString=&#34;Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=true&#34;<br/><br/>数据库连接成功后<br/><br/>ConnectString=&#34;Provider=MSDAORA.1;Password=mypassword;User ID=dlyx;Data Source=ydgl22&#34;<br/><br/>----------------------------------------------------------------------------------------------------------<br/><br/> 总体来说，如果数据库连接成功后不再需要连接的密码，出于安全性考虑，还是建议将Persist Security Info设为false，以防止后门程序取得数据库连接的密码（windows2003在sp1前就发生过这个问题）。<br/><br/>以下是摘自微软的ADO.net资料<br/><br/><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsecureadonetconnections.asp" target="_blank" rel="external">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsecureadonetconnections.asp</a><br/>Keep Persist Security Info as False<br/><br/>Setting Persist Security Info to true o&#114; yes will allow security-sensitive information, including the userid and password, to be obtained from the connection after the connection has been opened. If you are supplying a userid and password when making a connection, you are most protected if that information is used to open the connection, and then discarded. As a result, your option that helps to provide greater security is to set Persist Security Info to false o&#114; no.<br/><br/>This is especially important if you are supplying an open connection to an untrusted source o&#114; persisting connection information to disk. Keeping Persist Security Info as false helps ensure that the untrusted source does not have access to the security-sensitive information for your connection and also helps ensure that no security-sensitive information is persisted to disk with your connection string information.<br/><br/>Persist Security Info is false by default.]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=330</link>
			<title><![CDATA[JOIN ，LEFT JOIN ，ALL JOIN 等的区别和联系 ]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Thu,13 Nov 2008 14:39:53 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=330</guid>
		<description><![CDATA[left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 <br/>right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录<br/>inner join(等值连接) 只返回两个表中联结字段相等的行<br/><br/>举例如下： <br/>--------------------------------------------<br/>表A记录如下：<br/>aID　　　　　aNum<br/>1　　　　　a20050111<br/>2　　　　　a20050112<br/>3　　　　　a20050113<br/>4　　　　　a20050114<br/>5　　　　　a20050115<br/><br/>表B记录如下:<br/>bID　　　　　bName<br/>1　　　　　2006032401<br/>2　　　　　2006032402<br/>3　　　　　2006032403<br/>4　　　　　2006032404<br/>8　　　　　2006032408<br/><br/>--------------------------------------------<br/>1.left join<br/>sql语句如下: <br/>sel&#101;ct * from A<br/>left join B <br/>on A.aID = B.bID<br/><br/>结果如下:<br/>aID　　　　　aNum　　　　　bID　　　　　bName<br/>1　　　　　a20050111　　　　1　　　　　2006032401<br/>2　　　　　a20050112　　　　2　　　　　2006032402<br/>3　　　　　a20050113　　　　3　　　　　2006032403<br/>4　　　　　a20050114　　　　4　　　　　2006032404<br/>5　　　　　a20050115　　　　NULL　　　　　NULL<br/><br/>（所影响的行数为 5 行）<br/>结果说明:<br/>left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.<br/>换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).<br/>B表记录不足的地方均为NULL.<br/>--------------------------------------------<br/>2.right join<br/>sql语句如下: <br/>sel&#101;ct * from A<br/>right join B <br/>on A.aID = B.bID<br/><br/>结果如下:<br/>aID　　　　　aNum　　　　　bID　　　　　bName<br/>1　　　　　a20050111　　　　1　　　　　2006032401<br/>2　　　　　a20050112　　　　2　　　　　2006032402<br/>3　　　　　a20050113　　　　3　　　　　2006032403<br/>4　　　　　a20050114　　　　4　　　　　2006032404<br/>NULL　　　　　NULL　　　　　8　　　　　2006032408<br/><br/>（所影响的行数为 5 行）<br/>结果说明:<br/>仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.<br/>--------------------------------------------<br/>3.inner join<br/>sql语句如下: <br/>sel&#101;ct * from A<br/>innerjoin B <br/>on A.aID = B.bID<br/><br/>结果如下:<br/>aID　　　　　aNum　　　　　bID　　　　　bName<br/>1　　　　　a20050111　　　　1　　　　　2006032401<br/>2　　　　　a20050112　　　　2　　　　　2006032402<br/>3　　　　　a20050113　　　　3　　　　　2006032403<br/>4　　　　　a20050114　　　　4　　　　　2006032404<br/><br/>结果说明:<br/>很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.<br/>--------------------------------------------<br/>注: <br/>LEFT JOIN操作用于在任何的 FROM 子句中，组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个（左边）开始的两个表中的全部记录，即使在第二个（右边）表中并没有相符值的记录。<br/><br/>语法：FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2<br/><br/>说明：table1, table2参数用于指定要将记录组合的表的名称。<br/>field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据，但它们不需要有相同的名称。<br/>compopr参数指定关系比较运算符：&#34;=&#34;， &#34;&lt;&#34;， &#34;&gt;&#34;， &#34;&lt;=&#34;， &#34;&gt;=&#34; 或 &#34;&lt;&gt;&#34;。<br/>如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段，将会发生错误.]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=306</link>
			<title><![CDATA[ASP连接ACCESS2007数据库时注意事项]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,13 Oct 2008 15:02:27 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=306</guid>
		<description><![CDATA[前几天在自己的笔记本上安装了OFFICE2007。今天做了一个百度友情链接检查的工具， 在连接ACCESS2007数据库的时候，使用的驱动代码为：&#34;provider=microsoft.jet.oledb.4.0;data source=&#34;&amp;server.mappath(&#34;queryrecord.mdb&#34;) 。确发现提示： <br/>Microsoft JET Database Engine 错误 &#39;80004005&#39; <br/><br/>不可识别的数据库格式<br/>但是以前没装OFFICE2007前建立好的数据库（以前用的ACCESS2003），使用这个代码可以正常运行。想了一想，估计是因为ACCESS2007的驱动代码已经发生变化。进入<a href="http://www.connectionstrings.com/" target="_blank" rel="external">http://www.connectionstrings.com/</a>（注意：该网站提供了现有所有数据库的连接方式，建议大家收藏该网址）一看，果真ACCESS2007的数据库连接方式已经发生变化。已经更改为：<br/>Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;<br/><br/>于是更改了下代码，程序运行正常。<br/>随后将代码更新至服务器<a href="http://baiduquery.newbooks.com.cn" target="_blank" rel="external">http://baiduquery.newbooks.com.cn</a> ,确发现程序还是不能运行，提示“驱动没有安装”，于是把驱动代码更改为microsoft.jet.oledb.4.0，提示“不可识别的数据库格式”，看来在本机建立的数据库为ACCESS2007的话，传到服务器上仍旧为ACCESS2007。于是网上搜索了一下ACCESS2007的驱动，安装，程序运行正常。<br/>ACCESS2007的驱动下载地址：<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7554f536-8c28-4598-9b72-ef94e038c891" target="_blank" rel="external">http://www.microsoft.com/downloads/details.aspx?FamilyID=7554f536-8c28-4598-9b72-ef94e038c891</a>&amp;DisplayLang=zh-cn<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=259</link>
			<title><![CDATA[80004005]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Thu,21 Aug 2008 10:42:25 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=259</guid>
		<description><![CDATA[Microsoft JET Database Engine 错误 &#39;80004005&#39; 完整解决办法<br/><br/>关键词：<br/><br/>access数据库打开错误<br/><br/>windows权限设置<br/><br/>temp路径设置<br/><br/>网站数据库打不开<br/><br/>原因：<br/><br/>服务器采用了雨林木风的win2003<br/><br/>网站打不开,conn.asp文件连接数据库部分报错：<br/><br/>Microsoft JET Database Engine 错误 &#39;80004005&#39;<br/><br/>未指定的错误<br/><br/> <br/><br/>总结办法：<br/><br/>1IIS的来宾访问用户设置成管理员组<br/><br/>在计算机管理--用户中，找到IUSR_****，隶属于添加 administrators，然后需要重启IIS，网站可以打开了<br/><br/>把IIS的来宾访问用户设置成管理员，暂时这样用了……安全性上不推荐<br/><br/>2、C:WindowsTemp 设置everyone或者user的写权限,推荐user<br/><br/>此方法如果不行，可能你遇到了和我一样的问题，环境变量没有设在C:WindowsTemp<br/><br/>而是在C:\Documents and Settings\LocalService\Local Settings\ temp<br/><br/>或者C:\Documents and Settings\administrator\Local Settings\ temp<br/><br/> <br/><br/>采用下面办法<br/><br/>3、<br/><br/>方法一、设置此目录给IUSR_****写权限，<br/><br/>或者将环境变量（电脑-属性-高级-环境变量-）<br/>方法：借助filemon工具，在打开网页时，会发现在filemon中，结果有access denied，双击后找到这个目录，此目录就是因为没有权限导致access数据库打开失败的症结所在。给tempe文件夹一个写权限（everyone用户或者IUSR_****,推荐IUSR_****）<br/><br/>方法二、更改统环境变量temp和tmp原来的%USERPROFILE%Local SettingsTemp<br/><br/>为%SystemRoot%TEMP，设置权限，重新启动电脑后环境变量才能生效<br/><br/>分析原因：<br/><br/>access数据库打开后需要放到临时文件夹中释放再打开，但由于网上的用户访问时没有权限打开本地的临时文件夹，导致了数据库连接失败。<br/><br/>我采用了方法一，方法二没有尝试，原理相同<br/><br/><br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=255</link>
			<title><![CDATA[Provider=Microsoft.Jet.OLEDB.4.0]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,20 Aug 2008 16:02:01 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=255</guid>
		<description><![CDATA[Microsoft.Jet.OLEDB.4.0是一种ACCESS数据库的搜索引擎,用于VB的ADO数据控件与ACCESS数据库代码连接.新建工程时选数据工程，此时VB6集成调试环境左边工具箱内已加载了有关数据库编程必须的控件。 <br/>然后在FORM1窗体中添加ADODC控件和DATAGRID控件，将DATAGRID1的属性DATASOURCE选ADODC1，打开ADODC1控件属性页使用连接字符串，选生成，在提供者选项中ACCESS数据库选MICROSOFT jet 4.0 OLE DB Provider,然后按要求连接数据库等。在ADODC1控件属性页使用连接字符串空白文本窗口中就有一长串字符串，注意该字符串可复制到程序代码用于编程。ADODC1控件属性页的数据源内有命令文本（SQL）编写窗口可编写SQL查询语言。该窗口的SQL语句可复制到程序代码用于编程。 <br/>SQL查询语言主要结构为： <br/>Sel&#101;ct 查询字段 from 表名 Wh&#101;re 查询条件语句 [排序语句或分组语句] <br/>查询字段必须分别用（西文）逗号分开或就用一个*号代替，上述查询中排序语句建议最好应用。 <br/>SQL查询语言如有错程序运行时告诉你出错，作相应改动即可。本人一般先按上述连接，SQL用&#34;Sel&#101;ct * FROM TabelName&#34;作调试，无问题，用一个按钮孔件将前述需复制的连接字符串和SQL查询语言先复制于按钮控件的CLICK事件中备着，以便放着以后使用。然后删去ADODC1孔件，再添加ADODC1控件再添其他内容。]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=128</link>
			<title><![CDATA[sql 经典语句]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Mon,15 Oct 2007 16:42:47 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=128</guid>
		<description><![CDATA[SQL分类： <br/>DDL—数据定义语言(Cr&#101;ate，Alt&#101;r，Dro&#112;，DECLARE) <br/>DML—数据操纵语言(Sel&#101;ct，Del&#101;te，Up&#100;ate，Ins&#101;rt) <br/>DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)<br/><br/>首先,简要介绍基础语句：<br/>1、说明：创建数据库<br/>Cr&#101;ate DATABASE database-name <br/>2、说明：删除数据库<br/>dro&#112; database dbname<br/>3、说明：备份sql server<br/>--- 创建 备份数据的 device<br/>USE master<br/>EXEC sp_addumpdevice &#39;disk&#39;, &#39;testBack&#39;, &#39;c:\mssql7backup\MyNwind_1.dat&#39;<br/>--- 开始 备份<br/>BACKUP DATABASE pubs TO testBack <br/>4、说明：创建新表<br/>cr&#101;ate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br/>根据已有的表创建新表： <br/>A：cr&#101;ate table tab_new like tab_old (使用旧表创建新表)<br/>B：cr&#101;ate table tab_new as sel&#101;ct col1,col2… from tab_old definition only<br/>5、说明：删除新表dro&#112; table tabname <br/>6、说明：增加一个列<br/>Alt&#101;r table tabname add column col type<br/>注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br/>7、说明：添加主键： Alt&#101;r table tabname add primary key(col) <br/>说明：删除主键： Alt&#101;r table tabname dro&#112; primary key(col) <br/>8、说明：创建索引：cr&#101;ate [unique] index idxname on tabname(col….) <br/>删除索引：dro&#112; index idxname<br/>注：索引是不可更改的，想更改必须删除重新建。<br/>9、说明：创建视图：cr&#101;ate view viewname as sel&#101;ct statement <br/>删除视图：dro&#112; view viewname<br/>10、说明：几个简单的基本的sql语句<br/>选择：sel&#101;ct * from table1 wh&#101;re 范围<br/>插入：ins&#101;rt into table1(field1,field2) values(value1,value2)<br/>删除：del&#101;te from table1 wh&#101;re 范围<br/>更新：up&#100;ate table1 set field1=value1 wh&#101;re 范围<br/>查找：sel&#101;ct * from table1 wh&#101;re field1 like ’%value1%’ ---like的语法很精妙，查资料!<br/>排序：sel&#101;ct * from table1 o&#114;der by field1,field2 [desc]<br/>总数：sel&#101;ct count * as totalcount from table1<br/>求和：sel&#101;ct sum(field1) as sumvalue from table1<br/>平均：sel&#101;ct avg(field1) as avgvalue from table1<br/>最大：sel&#101;ct max(field1) as maxvalue from table1<br/>最小：sel&#101;ct 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: sel&#101;ct 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/>法一：sel&#101;ct * into b from a wh&#101;re 1&lt;&gt;1<br/>法二：sel&#101;ct top 0 * into b from a<br/><br/>2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b;<br/><br/>3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b in ‘具体数据库’ wh&#101;re 条件<br/>例子：..from b in &#39;&#34;&amp;Server.MapPath(&#34;.&#34;)&amp;&#34;\data.mdb&#34; &amp;&#34;&#39; wh&#101;re..<br/><br/>4、说明：子查询(表名1：a 表名2：b)<br/>sel&#101;ct a,b,c from a wh&#101;re a IN (sel&#101;ct d from b ) 或者: sel&#101;ct a,b,c from a wh&#101;re a IN (1,2,3)<br/><br/>5、说明：显示文章、提交人和最后回复时间<br/>sel&#101;ct a.title,a.username,b.adddate from table a,(sel&#101;ct max(adddate) adddate from table wh&#101;re table.title=a.title) b<br/><br/>6、说明：外连接查询(表名1：a 表名2：b)<br/>sel&#101;ct 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/>sel&#101;ct * from (Sel&#101;ct a,b,c FROM a) T wh&#101;re t.a &gt; 1;<br/><br/>8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br/>sel&#101;ct * from table1 wh&#101;re time between time1 and time2<br/>sel&#101;ct a,b,c, from table1 wh&#101;re a not between 数值1 and 数值2<br/><br/>9、说明：in 的使用方法<br/>sel&#101;ct * from table1 wh&#101;re a [not] in (‘值1’,’值2’,’值4’,’值6’)<br/><br/>10、说明：两张关联表，删除主表中已经在副表中没有的信息 <br/>del&#101;te from table1 wh&#101;re not exists ( sel&#101;ct * from table2 wh&#101;re table1.field1=table2.field1 )<br/><br/>11、说明：四表联查问题：<br/>sel&#101;ct * 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 wh&#101;re .....<br/><br/>12、说明：日程安排提前五分钟提醒 <br/>SQL: sel&#101;ct * from 日程安排 wh&#101;re datediff(&#39;minute&#39;,f开始时间,getdate())&gt;5<br/><br/>13、说明：一条sql 语句搞定数据库分页<br/>sel&#101;ct top 10 b.* from (sel&#101;ct top 20 主键字段,排序字段 from 表名 o&#114;der by 排序字段 desc) a,表名 b wh&#101;re b.主键字段 = a.主键字段 o&#114;der by a.排序字段<br/><br/>14、说明：前10条记录<br/>sel&#101;ct top 10 * form table1 wh&#101;re 范围<br/><br/>15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br/>sel&#101;ct a,b,c from tablename ta wh&#101;re a=(sel&#101;ct max(a) from tablename tb wh&#101;re tb.b=ta.b)<br/><br/>16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br/>(sel&#101;ct a from tableA ) except (sel&#101;ct a from tableB) except (sel&#101;ct a from tableC)<br/><br/>17、说明：随机取出10条数据<br/>sel&#101;ct top 10 * from tablename o&#114;der by newid()<br/><br/>18、说明：随机选择记录<br/>sel&#101;ct newid()<br/><br/>19、说明：删除重复记录<br/>Del&#101;te from tablename wh&#101;re id not in (sel&#101;ct max(id) from tablename group by col1,col2,...)<br/><br/>20、说明：列出数据库里所有的表名<br/>sel&#101;ct name from sysobjects wh&#101;re type=&#39;U&#39; <br/><br/>21、说明：列出表里的所有的<br/>sel&#101;ct name from syscolumns wh&#101;re id=object_id(&#39;TableName&#39;)<br/><br/>22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似sel&#101;ct 中的case。<br/>sel&#101;ct type,sum(case vender when &#39;A&#39; then pcs else 0 end),sum(case vender when &#39;C&#39; then pcs else 0 end),sum(case vender when &#39;B&#39; 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/>sel&#101;ct top 5 * from (sel&#101;ct top 15 * from table o&#114;der by id asc) table_别名 o&#114;der by id desc<br/>　　<br/>随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）<br/>　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环： <br/>Randomize <br/>RNumber = Int(Rnd*499) +1 <br/>　<br/>While Not objRec.EOF <br/>If objRec(&#34;ID&#34;) = 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 = &#34;Sel&#101;ct * FROM Customers Wh&#101;re ID = &#34; &amp; RNumber <br/>　<br/>set objRec = ObjConn.Execute(SQL) <br/>Response.WriteRNumber &amp; &#34; = &#34; &amp; objRec(&#34;ID&#34;) &amp; &#34; &#34; &amp; objRec(&#34;c_email&#34;) <br/>　<br/>　　不必写出RNumber 和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作“随机”记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。 <br/>再谈随机数 <br/>　　现在你下定决心要榨干Random 函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 <br/>　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录： <br/>SQL = &#34;Sel&#101;ct * FROM Customers Wh&#101;re ID = &#34; &amp; RNumber &amp; &#34; o&#114; ID = &#34; &amp; RNumber2 &amp; &#34; o&#114; ID = &#34; &amp; RNumber3 <br/>　<br/>　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是 Sel&#101;ct 语句只显示一种可能（这里的ID 是自动生成的号码）： <br/>SQL = &#34;Sel&#101;ct * FROM Customers Wh&#101;re ID BETWEEN &#34; &amp; RNumber &amp; &#34; AND &#34; &amp; RNumber &amp; &#34;+ 9&#34; <br/><br/>　　注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。<br/><br/>　<br/>随机读取若干条记录，测试过<br/>Access语法：Sel&#101;ct top 10 * From 表名 o&#114;DER BY Rnd(id)<br/>Sql server:sel&#101;ct top n * from 表名 o&#114;der by newid()<br/>mysqlelect * From 表名 o&#114;der 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 wh&#101;re ...<br/>使用SQL语句 用...代替过长的字符串显示<br/>语法：<br/>SQL数据库：sel&#101;ct case when len(field)&gt;10 then left(field,10)+&#39;...&#39; else field end as news_name,news_id from tablename<br/>Access数据库：Sel&#101;ct iif(len(field)&gt;2,left(field,2)+&#39;...&#39;,field) FROM tablename; <br/>　<br/>Conn.Execute说明<br/>Execute方法<br/>　　该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种：<br/>　　　　1．执行SQL查询语句时，将返回查询得到的记录集。用法为：<br/>　　　　Set 对象变量名=连接对象.Execute(&#34;SQL 查询语言&#34;)<br/>　　　Execute方法调用后，会自动创建记录集对象，并将查询结果存储在该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。<br/><br/>　　　　2．执行SQL的操作性语言时，没有记录集的返回。此时用法为：<br/>　　　　连接对象.Execute &#34;SQL 操作性语句&#34; [, RecordAffected][, Option]<br/>　　　　　　·RecordAffected 为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。<br/><br/>　　　　　·Option 可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。<br/><br/>·BeginTrans、RollbackTrans、CommitTrans方法<br/>　　这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物；RollbackTrans用于回滚事务；CommitTrans用于提交所有的事务处理结果，即确认事务的处理。<br/>　　事务处理可以将一组操作视为一个整体，只有全部语句都成功执行后，事务处理才算成功；若其中有一个语句执行失败，则整个处理就算失败，并恢复到处里前的状态。<br/>　　BeginTrans和CommitTrans用于标记事务的开始和结束，在这两个之间的语句，就是作为事务处理的语句。判断事务处理是否成功，可通过连接对象的Error集合来实现，若Error集合的成员个数不为0，则说明有错误发生，事务处理失败。Error集合中的每一个Error对象，代表一个错误信息。<br/>]]></description>
		</item>
		
</channel>
</rss>
