﻿<?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>IT博客-asfman-文章分类-sql access</title><link>http://www.cnitblog.com/asfman/category/2176.html</link><description>有些事，我们明知道是错的，也要去坚持，因为不甘心；有些人，我们明知道是爱的，也要去放弃，因为没结局；有时候，我们明知道没路了，却还在前行，因为习惯了。</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 05:36:24 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 05:36:24 GMT</pubDate><ttl>60</ttl><item><title>创建sql数据库</title><link>http://www.cnitblog.com/asfman/articles/31335.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 06 Aug 2007 07:44:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/31335.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/31335.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/31335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/31335.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/31335.html</trackback:ping><description><![CDATA[<p>var DH=GetObject("script:f:\\db\\DbHelper.sct");<br>DH.ConnStr="Provider=Sqloledb;data source=(local);user id=sa;password=";<br>DH.Catalog.ActiveConnection.Execute("create database asfman");<br>DH.ConnStr="Provider=Sqloledb;data source=(local);user id=sa;password=;initial catalog=asfman";<br>DH.Catalog=null;<br>DH.Catalog.ActiveConnection.Execute("create table test(name varchar(10))");<br>WSH.Echo("ok");</p>
<img src ="http://www.cnitblog.com/asfman/aggbug/31335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-08-06 15:44 <a href="http://www.cnitblog.com/asfman/articles/31335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CursorLocation Cusortype</title><link>http://www.cnitblog.com/asfman/articles/30913.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 30 Jul 2007 07:28:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/30913.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/30913.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/30913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/30913.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/30913.html</trackback:ping><description><![CDATA[<p>如果将 CursorLocation 属性设置为 adUseClient 则只支持 adUseStatic 的设置。如果设置了不支持的值，不会导致错误，将使用最接近支持的 CursorType。 <br><br>CursorLocation : 1<br>CursorType = 0;不分页<br>CursorType = 1;不分页 // Sql Server、Oracle 变成 3<br>CursorType = 2;不分页，变成 3 // Sql Server 不分页<br>CursorType = 3;不分页</p>
<p>CursorLocation : 2<br>CursorType = 0;不分页<br>CursorType = 1;可分页 // Sql Server、Oracle 变成 3<br>CursorType = 2;不分页，变成 3 // Sql Server 不分页<br>CursorType = 3;可分页</p>
<p>CursorLocation : 3<br>CursorType = 0;可分页，变成 3<br>CursorType = 1;可分页，变成 3<br>CursorType = 2;可分页，变成 3<br>CursorType = 3;可分页 </p>
<img src ="http://www.cnitblog.com/asfman/aggbug/30913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-07-30 15:28 <a href="http://www.cnitblog.com/asfman/articles/30913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>create table</title><link>http://www.cnitblog.com/asfman/articles/30563.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Wed, 25 Jul 2007 09:05:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/30563.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/30563.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/30563.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/30563.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/30563.html</trackback:ping><description><![CDATA[&lt;%@ Language="Javascript" %&gt;<br>&lt;%<br>Catalog = new ActiveXObject("AdoX.Catalog");<br>Catalog.Create("Provider=Microsoft.Jet.Oledb.4.0;Data Source="+Server.MapPath("test.mdb"));<br>Catalog.ActiveConnection.Execute("create table asfman(id counter, name varchar(100), message text(100), char2 char(100), _time time, n number,beizhu memo)");<br>Response.Write("create table successfully");<br>%&gt;
<img src ="http://www.cnitblog.com/asfman/aggbug/30563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-07-25 17:05 <a href="http://www.cnitblog.com/asfman/articles/30563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>char,varchar,nvarchar的区别 </title><link>http://www.cnitblog.com/asfman/articles/30560.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Wed, 25 Jul 2007 08:24:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/30560.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/30560.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/30560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/30560.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/30560.html</trackback:ping><description><![CDATA[<u><font color=#810081>char,varchar,nvarchar的区别</font></u>
<div class=postText>
<p><span lang=EN-US><strong><font face=Simsun size=1></font></strong>char对英文字符(ascii)占一个字节，而对于每个汉字，占两个字节，char(10)定义一个定长为10的char字符串类型,不足10个字符则用空格在后边补足。</span></p>
<p><span lang=EN-US>varchar对于英文字符(ascii)占一个字符，对于单个汉字占两个字符，varchar(10)定义一个最大长度为10的varchar字符串类型，不足10个字符时，数据长度为实际字符长度。</span></p>
<p><span lang=EN-US>nvarchar对于英文字符占2个字符，对于汉字也占两个字符，nvarchar(10)定义一个最大长度为10的nvarchar字符串类型，不足10个字符时，数据长度为实际字符长度。</span></p>
<p><span lang=EN-US>理论上char比varchar稍快一些，但并不绝对，受各种不同环境的影响，总的来说，char类型更占空间，但是在频繁处理大量数据时速度优势就显出来了，而varchar相对节省空间，但是频繁的处理数据容易产生碎片等缺点。</span></p>
</div>
<img src ="http://www.cnitblog.com/asfman/aggbug/30560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-07-25 16:24 <a href="http://www.cnitblog.com/asfman/articles/30560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作数据库结构Sql语句 </title><link>http://www.cnitblog.com/asfman/articles/25292.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:12:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25292.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25292.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25292.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25292.html</trackback:ping><description><![CDATA[<br>新建表：<br>create table [表名]<br>(<br>[自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,<br>[字段1] nVarChar(50) default '默认值' null ,<br>[字段2] ntext null ,<br>[字段3] datetime,<br>[字段4] money null ,<br>[字段5] int default 0,<br>[字段6] Decimal (12,4) default 0,<br>[字段7] image null ,<br>)<br><br>删除表：<br>Drop table [表名]<br><br>插入数据：<br>INSERT INTO [表名] (字段1,字段2) VALUES (100,'51WINDOWS.NET')<br><br>删除数据：<br>DELETE FROM [表名] WHERE [字段名]&gt;100<br><br>更新数据：<br>UPDATE [表名] SET [字段1] = 200,[字段2] = '51WINDOWS.NET' WHERE [字段三] = 'HAIWA'<br><br>新增字段：<br>ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL<br><br>删除字段：<br>ALTER TABLE [表名] DROP COLUMN [字段名]<br><br>修改字段：<br>ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL<br><br>重命名表：(Access 重命名表，请参考文章：在Access数据库中重命名表)<br>sp_rename '表名', '新表名', 'OBJECT'<br><br>新建约束：<br>ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] &lt;= '2000-1-1')<br><br>删除约束：<br>ALTER TABLE [表名] DROP CONSTRAINT 约束名<br><br>新建默认值<br>ALTER TABLE [表名] ADD CONSTRAINT 默认值名 DEFAULT '51WINDOWS.NET' FOR [字段名]<br><br>删除默认值<br>ALTER TABLE [表名] DROP CONSTRAINT 默认值名<br><br>引用地址： <a class=blog_content href="http://www.51windows.net/data/?url=/data/files/file_277.asp" target=_blank>http://www.51windows.net/data/?url=/data/files/file_277.asp</a> <br><br>关于在线建立数据库，这里有点东西<br><br><a class=blog_content href="http://www.cnbruce.com/blog/showlog.asp?cat_id=26&amp;log_id=473" target=_blank>http://www.cnbruce.com/blog/showlog.asp?cat_id=26&amp;log_id=473</a> <br>
<img src ="http://www.cnitblog.com/asfman/aggbug/25292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:12 <a href="http://www.cnitblog.com/asfman/articles/25292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ASP中使用SQL语句   </title><link>http://www.cnitblog.com/asfman/articles/25291.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:11:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25291.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25291.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25291.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25291.html</trackback:ping><description><![CDATA[<div class=adtext style="FLOAT: right"><iframe name=google_ads_frame marginWidth=0 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6469793424637365&amp;dt=1175731675750&amp;lmt=1175731675&amp;alt_color=F3F3F3&amp;format=180x150_as&amp;output=html&amp;channel=3456156516&amp;url=http%3A%2F%2Fwww.cnbruce.com%2Fblog%2Fshowlog.asp%3Fcat_id%3D29%26log_id%3D667&amp;color_bg=F3F3F3&amp;color_text=191919&amp;color_link=191919&amp;color_url=000000&amp;color_border=F3F3F3&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.cnbruce.com%2Fblog%2Findex.asp%3Fvt%3Dsearch&amp;cc=397&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true" frameBorder=0 width=180 scrolling=no height=150 allowTransparency></iframe></div>
<strong>1，SELECT 语句 </strong><br><br>在SQL的世界里，最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SELECT what <br>FROM whichTable <br>WHERE criteria <br><br></td>
        </tr>
    </tbody>
</table>
<br>执行以上语句就会创建一个存放其结果的查询。 <br><br>而在ASP页面文件上，你也可以采用以上的一般语法，不过情况稍微不同，ASP编程的时候，SELECT 语句的内容要作为字符串赋给一个变量：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL = "SELECT what FROM whichTable WHERE criteria" <br><br></td>
        </tr>
    </tbody>
</table>
<br>好了，明白了ASP下SQL&#8220;说话&#8221;的方式，接下来如法炮制即可，只要满足你的需要，传统的SQL查询模式和条件查询都能派用场。 <br><br>举例说明，不妨假设你的数据库内有个数据表，名字是Products ，现在你想取出这个表里的全部记录。然后你就编写了下面的代码： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL ="SELECT * FROM Products" <br><br></td>
        </tr>
    </tbody>
</table>
<br>以上代码——SQL语句的作用就是取出表内的全部数据——执行后将会选出数据表内的全部记录。不过，要是只想从表内取出某个特定列，比如p_name。那就不能用 * 通配符了，这里得键入具体某列的名字，代码如下： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL ="SELECT p_name FROM Products" <br><br></td>
        </tr>
    </tbody>
</table>
<br>执行以上查询之后Products 表内、p_name 列的内容就会全被选取出来。<br><br><strong>2，WHERE子句设置查询条件</strong><br><br>举个例子，假如你只打算取出p_name 记录，而且这些记录的名字必须以字母w打头，那么你就要用到下面的WHERE 子句了： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'" <br><br></td>
        </tr>
    </tbody>
</table>
<br>WHERE 关键词的后面跟着用来过滤数据的条件，有了这些条件的帮助，只有满足一定标准的数据才会被查询出来。在以上的例子里，查询的结果只会得到名字以w 打头的p_name 记录。 <br><br>以上例子中，百分比符号（%）的含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据的记录条目。所以，在执行以上查询的时候， west 和 willow 就会从Products 表内被选取出来并存放在查询里。 <br><br>就像你看到的那样，只要仔细地设计SELECT 语句，你就可以限制recordset 中返回的信息量，多琢磨琢磨总能满足你的要求。 <br><br>这些啊还不过是掌握SQL用途刚起步。为了帮助你逐步掌握复杂的SELECT 语句用法，下面就让我们再来看一下关键的标准术语：比较运算符，这些玩意都是你在构筑自己的SELECT 字符串来获得特定数据时要经常用到的。 <br><br><strong>WHERE子句基础 </strong><br><br>在开始创建WHERE 子句的时候，最简单的方式是采用标准的比较符号，它们是 &lt; 、 &lt;= 、 &gt; 、 &gt;= 、&lt;&gt; 和 =。显然，你很快就能明白以下代码的含义和具体运行结果： <br>SELECT * FROM Products WHERE p_price &gt;= 199.95 <br>SELECT * FROM Products WHERE p_price &lt;&gt; 19.95 <br>SELECT * FROM Products WHERE p_version = '4' <br><br>注意： 这里你会注意到，最后一个例句中的数字4周围加了单引号。原因是这样的，在这个例子中的 "4" 是文本类型而非数字类型。<br><br><strong>3，比较运算符：LIKE、NOT LIKE和 BETWEEN </strong><br><br>比较运算符指定从表内取出数据的内容范围。你可以用它们来创建过滤器以便缩小recordset的范围，促使其只保存给定任务下你关心的信息。 <br><br>你已经在上面取出w打头记录的例子中看到了LIKE的用法。LIKE判定词是一个非常有用的符号。不过，在很多情况下用了它可能会带给你太多的数据，所以在用到它之前最好先开动脑筋多想想自己到底想获得什么数据。假设你想取出5位数字的SKU号码，而且其开头是1结尾是5，那么你可以用下划符（_）代替%符号： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL ="SELECT * FROM Products WHERE p_sku LIKE '1___5'" <br><br></td>
        </tr>
    </tbody>
</table>
<br>下划符表示任意一个字符。所以在输入&#8220;1___5&#8221;的情况下，你的搜索就会限制在满足特定模式的5位数范围内了。 <br><br>假如你想反其道而行之，要找出所有不匹配&#8220;1___5&#8221;模式的SKU条目。那么你只需要在刚才语句例子中的LIKE前面加上NOT就可以了。 <br><br>BETWEEN <br><br>假设你想取出一定范围内的数据，而且你事先知道范围的起点和终点，那么你不妨采用BETWEEN 判断词。现在就让我们假设你想选取给定表内范围在 1和 10之间的记录。你可以如下使用BETWEEN： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>&#8230;WHERE ID BETWEEN 1 AND 10 <br><br></td>
        </tr>
    </tbody>
</table>
<br>或者你也可以采用已经熟悉的数学判断字句： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>&#8230;WHERE ID &gt;= 1 AND ID &gt;= 10 <br><br></td>
        </tr>
    </tbody>
</table>
<br><br><strong>4，联合语句 </strong><br><br>我们到目前为止所谈到的SQL语句相对较为简单，如果再能通过标准的recordset循环查询，那么这些语句也能满足一些更复杂的要求。不过，何必非要拘泥在浅尝则止的基础水准之上呢？你完全可以再增加其他一些符号，比如AND、OR和NOT来完成更强大的功能。 <br><br>以下面的SQL语句为例：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL ="SELECT c_firstname,c_lastname,c_email FROM customers WHERE c_email IS NOT NULL AND c_purchase ='1' OR c_purchase ='2' AND c_lastname LIKE 'A%'" <br><br></td>
        </tr>
    </tbody>
</table>
<br>就你目前所掌握的SQL知识，以上的例子也不难解释，不过上面的语句并没有很明白地让你看清条件字句是如何胶合在单一个SQL语句中的。 <br><br><strong>多行语句 </strong><br><br>在SQL语句不好懂的情况下，你不妨把整个语句分解为多行代码，然后在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL = "SELECT c_firstname,c_lastname,c_emailaddress,c_phone" <br>SQL = SQL &amp; " FROM customers" <br>SQL = SQL &amp; " WHERE c_firstname LIKE 'A%' and c_emailaddress NOT NULL" <br>SQL = SQL &amp; " ORDER BY c_lastname, c_firstname" <br><br></td>
        </tr>
    </tbody>
</table>
<br><br>到了最后一句，SQL变量就包含了以下的完整SELECT 语句：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>"SELECT c_firstname, c_lastname, c_emailaddress, c_phone FROM customers WHERE c_firstname LIKE &#8216;A%&#8217; and c_emailaddress NO NULL ORDER BY c_lastname,c_firstname" <br><br></td>
        </tr>
    </tbody>
</table>
<br>整句照上面分解之后显然好读多了！在进行调试的时候，你或许更乐于多敲几个字符把程序改得更好读些。不过你可要记住了，在封闭引号之前或者在打开引号之后你需要增加空格，这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。 <br><br><strong>5，开始执行</strong><br><br>在学会了SELECT语句的构造和用途之后你就该学习如何使用它了。在你所掌握的数据库工具下，这可能意味着你得按下某个写着&#8220;执行&#8221;字样的按钮。在ASP网页上，可以立即执行SQL语句也可以当作存储过程调用。 <br><br>一旦创建了SQL 语句，你还得设法访问其查询结果。显然，这里的关键就是ASP recordset。为了充分利用你更为熟悉的SQL技能，你需要调整常规ASP网页上最常采用的recordset： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>Dim rs <br>Set rs = Server.CreateObject ("ADODB.Recordset") <br>rs.Open SQL,Conn,1,2 <br><br></td>
        </tr>
    </tbody>
</table>
<br>这里Conn就是数据库连接声明，而唯一的修改就是在rs.Open，之后用包含SQL语句的变量代替了要查询的数据表的名称。 <br><br>这种方法的优点之一是你可以指定游标类型（如以上1 ,2 所示）。 <br><br><strong>执行SQL </strong><br>你还可以用紧凑的一行代码执行SQL语句来创建recordset。以下是语法： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>Dim rs <br>set rs = Conn.Execute(SQL) <br><br></td>
        </tr>
    </tbody>
</table>
<br>在上例中，你所看到的SQL是你存放自己SQL SELECT 语句的变量。该代码行&#8220;运行&#8221;SQL语句（或者说对数据库进行查询），选取数据并把数据存放在recordset 内，在上例中就是变量rs。这种方法的主要缺点是你不能选择自己想采用的游标类型。相反，recordset总是用前向游标打开。 <br><br>因为游标的缘故，你或许打算熟悉两种创建recordset的方法。直接执行查询节省了键入字符所消耗的时间，但那样的话你就得采用默认的游标了，这样有可能遭遇经常不能正常运行的毛病。不管你具体采用哪种办法，两者之间的最大的差别也不外乎代码精练与否。在不考虑你取得什么字段、你的标准是什么的前提下，也不管你如何存储数据，采用SQL式的recordset 在体积上会比ASP上打开的标准recordset 要小得多，更别提操作起来的简易性了。毕竟，通过过滤数据，你消除了耗费时间的if-then 测试和可能用到的循环。 <br><br><strong>6，存储查询</strong><br><br>当你的查询相对简单的时候，每次从头开始创建SQL语句也不费什么工夫，不过，复杂的查询就不同了，每次都从头来会产生很多开发错误。因此，一旦让SQL顺利地运行起来，你最好把它们存起来，在需要时再调用它们。这样，哪怕是一个简单查询你都能随时用上存储的查询语句了。 <br><br>假设你每周都要给团队做一次报告，指出目前存在的业务支持问题，这些数据需要从你的数据库中选取，而且要按照日期选择记录，同时根据你所在团队所采用的支持问题的类别排序。一旦你设计了这一查询，你何必以后每周都重新编写一次呢？不要在你的HTML页面上创建查询，你应该用你的数据库工具创建查询并且保存它。 然后你可以采用ActiveCommand 属性把查询插入到你的ASP网页。头一两回你可能会觉得没啥意思，其实也就几行代码而已： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>Set objSQ = Server.CreateObject ("ADODB.Command") <br>objSQ.ActiveConnection = "databaseName" <br>objSQ.CommandText = "storedQueryName" <br>objSQ.CommandType = adCmdStoredProc <br>set objRec = objSQ.Execute <br><br></td>
        </tr>
    </tbody>
</table>
<br>注意，采用adCmdStoredProc 表示你已经在页面上包含了adovbs.inc 文件。该文件定义了你可以按照名字而非数字进行访问的Access常数。只需要在页面上包含该文件即可），然后你就可以用adCmdStoredProc 这类名字了。这样，将来你再看到的时候更容易理解以上被存储的查询到底是个什么意思。<br><br><strong>7，ORDER BY </strong><br><br>从Access数据库中选取记录有件最令人丧气的事情，它们是以怎样的顺序输入到数据库内就按照怎样的顺序出来。就算你在Access环境内采用Sort By来改变记录视图，数据表内的记录顺序也并没有发生改变。 <br><br>如果你正在使用ASP recordset在网页上写出记录，那么你或许知道乱纷纷的顺序是多令人痛苦的事。但是你可能不得不经常得面对这一问题，因为并不存在什么简单方便的解决方案。好在ORDER BY 可以简化这一难题。 <br><br>为了对你的结果排序，只要在SELECT语句末尾加上ORDER BY，然后指定你需要排序的参照列即可。因此，如果你想要根据顾客的姓氏对Customers表排序，那么你可以编写如下的查询语句： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SQL = "SELECT c_lastname,c_firstname,c_email FROM Customers ORDER BY c_lastname" <br><br></td>
        </tr>
    </tbody>
</table>
<br>这样，只要你建立了recordset而且开始把结果写到屏幕上，你就会看见数据按照字母顺序排列起来了。 <br><br><br>下面是对表的操作：<br><br>只复制a表的结构到b表(不复制数据) <br>sql = "select * into b from a where 1&lt;&gt;1"<br>sql = "select * into b from a where 1=0"<br><br><br>复制a表的结构和数据到b表<br>sql = "select * into b from a"<br>
<img src ="http://www.cnitblog.com/asfman/aggbug/25291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:11 <a href="http://www.cnitblog.com/asfman/articles/25291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库命名及设计规范  </title><link>http://www.cnitblog.com/asfman/articles/25290.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:10:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25290.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25290.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25290.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25290.html</trackback:ping><description><![CDATA[<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>/**<br>*=================================================<br>*Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库命名及设计规范<br>*RCSfile:&nbsp;&nbsp;&nbsp;&nbsp;命名及设计规范-数据库.txt<br>*Revision:&nbsp;&nbsp;&nbsp;&nbsp;0.01Beta<br>*Author:&nbsp;&nbsp;&nbsp;&nbsp;Yehe(叶子)<br>*Released:&nbsp;&nbsp;&nbsp;&nbsp;2005-01-19 11:25:10<br>*Description:&nbsp;&nbsp;&nbsp;&nbsp;数据库命名及设计规范<br>*Contact:&nbsp;&nbsp;&nbsp;&nbsp;QQ:311673,MSN:myehe@msn.com,http://www.yehe.org<br>*==================================================<br>*/<br><br></td>
        </tr>
    </tbody>
</table>
<br><br><strong>1.数据库涉及字符规范</strong><br><br>我们约定：采用26个英文字母（区分大小写）和0－9这十个自然数，加上下划线_组成，共63个字符。不能出现其他字符（注释除外）。<br><br><strong>2.数据库对象命名规范</strong><br><br>我们约定，数据库对象包括表、视图（查询）、存储过程（参数查询）、函数、约束。对象名字由前缀和实际名字组成，长度不超过30。<br>前缀：使用小写字母<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb<br>视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vi<br>存储过程&nbsp;&nbsp;&nbsp;&nbsp;sp<br>函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn<br><br></td>
        </tr>
    </tbody>
</table>
<br>实际名字：实际名字尽量描述实体的内容，由单词或单词组合，每个单词的首字母大写，其他字母小写，不以数字和_开头。如<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User_Info<br>视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User_List<br>存储过程&nbsp;&nbsp;&nbsp;&nbsp;User_Delete<br><br></td>
        </tr>
    </tbody>
</table>
<br>因此，合法的对象名字类似如下。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbUser_Info&nbsp;&nbsp;&nbsp;&nbsp;tbMessage_Detail<br>视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vi_Message_List<br>存储过程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp_Message_Add<br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>3.数据库表命名规范</strong><br><br>我们约定，表名由前缀和实际名字组成。<br>前缀：使用小写字母tb，代表表。实际名字中，一个系统尽量采取同一单词，多个后面加_来连接区分。&nbsp;&nbsp;&nbsp;&nbsp;<br>因此，合法的表名类似如下。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>tbMember<br>tbMember_Info<br>tbForum_Board<br>tbBlog_Comment1 <br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>4.字段命名规范</strong><br><br>我们约定，字段由表的简称,实际名字组组成。如果此字段关联另外的字段，那么加下划线_连接关联表字段的字段名。<br>因此，合法的字段名类似如下。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>UserID_MeID<br>UserName<br>UserRegDate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>5.视图命名规范</strong><br><br>我们约定，字段由前缀和实际名字组成，中间用下划线连接。<br>前缀：使用小写字母vi，表示视图。<br>因此，合法的视图名类似如下。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>vi_User<br>vi_UserInfo<br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>6.存储过程命名规范</strong><br><br>我们约定，字段由前缀和实际名字加操作名字组成，中间用下划线连接。<br>前缀：使用小写字母sp，表示存储过程。<br>操作名字：Insert|Delelte|Update|Caculate|Confirm<br>例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>sp_User_Insert<br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>7.数据库设计文档规范</strong><br><br>所有数据库设计要写成文档，文档以模块化形式表达。大致格式如下：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>'-------------------------------------------<br>'&nbsp;&nbsp;&nbsp;&nbsp;表名：&nbsp;&nbsp;&nbsp;&nbsp;tbUser_Info<br>'&nbsp;&nbsp;&nbsp;&nbsp;作者：&nbsp;&nbsp;&nbsp;&nbsp;Yezi(叶子)<br>'&nbsp;&nbsp;&nbsp;&nbsp;日期：&nbsp;&nbsp;&nbsp;&nbsp;2004-12-17<br>'&nbsp;&nbsp;&nbsp;&nbsp;版本：&nbsp;&nbsp;&nbsp;&nbsp;1.0<br>'&nbsp;&nbsp;&nbsp;&nbsp;描述：&nbsp;&nbsp;&nbsp;&nbsp;保存用户资料<br>'&nbsp;&nbsp;&nbsp;&nbsp;具体内容：<br>'&nbsp;&nbsp;&nbsp;&nbsp;UserId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int，自动增量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户代码<br>'&nbsp;&nbsp;&nbsp;&nbsp;UserName&nbsp;&nbsp;&nbsp;&nbsp;char(12)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户名字<br>'&nbsp;&nbsp;&nbsp;&nbsp;......<br>'--------------------------------------------<br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>8.sql语句规范</strong><br><br>我们约定，所有sql关键词全部大写，比如SELECT,UPDATE,FROM,ORDER,BY等。
<img src ="http://www.cnitblog.com/asfman/aggbug/25290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:10 <a href="http://www.cnitblog.com/asfman/articles/25290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用SQL数据库查询语句精华使用简介(二)</title><link>http://www.cnitblog.com/asfman/articles/25288.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:09:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25288.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25288.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25288.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25288.html</trackback:ping><description><![CDATA[<strong>二、 联合查询<br></strong>　　<br>UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示，即执行联合查询。UNION的语法格式为：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　select_statement<br>　　UNION [ALL] selectstatement<br>　　[UNION [ALL] selectstatement][&#8230;n]<br><br></td>
        </tr>
    </tbody>
</table>
<br>其中selectstatement为待联合的SELECT查询语句。<br>　　<br>ALL选项表示将所有行合并到结果集合中。不指定该项时，被联合查询结果集合中的重复行将只保留一行。<br>　　<br>联合查询时，查询结果的列标题为第一个查询语句的列标题。因此，要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时，也必须使用第一查询语句中的列名、列标题或者列序号。<br>　　<br>在使用UNION 运算符时，应保证每个联合查询语句的选择列表中有相同数量的表达式，并且每个查询选择表达式应具有相同的数据类型，或是可以自动将它们转换为相同的数据类型。在自动转换时，对于数值类型，系统将低精度的数据类型转换为高精度的数据类型。<br>　　<br>在包括多个查询的UNION语句中，其执行顺序是自左至右，使用括号可以改变这一执行顺序。例如：<br>　　<br><strong>查询1 UNION (查询2 UNION 查询3)</strong><br><br><strong>三、连接查询</strong><br>　　<br>通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点，也是它区别于其它类型数据库管理系统的一个标志。<br>　　<br>在关系数据库管理系统中，表建立时各数据之间的关系不必确定，常把一个实体的所有信息存放在一个表中。当检索数据时，通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性，他们可以在任何时候增加新的数据类型。为不同实体创建新的表，尔后通过连接进行查询。<br>　　<br>连接可以在SELECT 语句的FROM子句或WHERE子句中建立，似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以，在Transact-SQL中推荐使用这种方法。<br>　　<br>SQL-92标准所定义的FROM子句的连接语法格式为：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　FROM join_table join_type join_table<br>　　[ON (join_condition)]<br><br></td>
        </tr>
    </tbody>
</table>
<br>其中join_table指出参与连接操作的表名，连接可以对同一个表操作，也可以对多表操作，对同一个表操作的连接又称做自连接。<br>　　<br>join_type 指出连接类型，可分为三种：内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作，并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同，内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是，外连接不只列出与连接条件相匹配的行，而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。<br>　　<br>交叉连接(CROSS JOIN)没有WHERE 子句，它返回连接表中所有数据行的笛卡尔积，其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。<br>　　<br>连接操作中的ON (join_condition) 子句指出连接条件，它由被连接表中的列和比较运算符、逻辑运算符等构成。<br>　　<br>无论哪种连接都不能对text、ntext和image数据类型列进行直接连接，但可以对这三种列进行间接连接。例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT p1.pub_id,p2.pub_id,p1.pr_info<br>　　FROM pub_info AS p1 INNER JOIN pub_info AS p2<br>　　ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)<br><br></td>
        </tr>
    </tbody>
</table>
　　<br><br><strong>(一)内连接</strong><br>　　<br>内连接查询操作列出与连接条件匹配的数据行，它使用比较运算符比较被连接列的列值。内连接分三种：<br>　　<br>1、等值连接：在连接条件中使用等于号(=)运算符比较被连接列的列值，其查询结果中列出被连接表中的所有列，包括其中的重复列。<br>　　<br>2、不等连接： 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括&gt;、&gt;=、&lt;=、&lt;、!&gt;、!&lt;和&lt;&gt;。<br>　　<br>3、自然连接：在连接条件中使用等于(=)运算符比较被连接列的列值，但它使用选择列表指出查询结果集合中所包括的列，并删除连接表中的重复列。<br>　　<br>例，下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT *<br>　　FROM authors AS a INNER JOIN publishers AS p<br>　　ON a.city=p.city<br><br></td>
        </tr>
    </tbody>
</table>
<br>又如使用自然连接，在选择列表中删除authors 和publishers 表中重复列(city和state)：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT a.*,p.pub_id,p.pub_name,p.country<br>　　FROM authors AS a INNER JOIN publishers AS p<br>　　ON a.city=p.city<br><br></td>
        </tr>
    </tbody>
</table>
<br><br><strong>(二)外连接</strong><br>　　<br>内连接时，返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时，它返回到查询结果集合中的不仅包含符合连接条件的行，而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b<br>　　ON a.username=b.username<br><br></td>
        </tr>
    </tbody>
</table>
　　<br>下面使用全外连接将city表中的所有作者以及user表中的所有作者，以及他们所在的城市：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT a.*,b.*<br>　　FROM city as a FULL OUTER JOIN user as b<br>　　ON a.username=b.username<br><br></td>
        </tr>
    </tbody>
</table>
<br>　　<br><strong>(三)交叉连接</strong><br>　　<br>交叉连接不带WHERE 子句，它返回被连接的两个表所有数据行的笛卡尔积，返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例，titles表中有6类图书，而publishers表中有8家出版社，则下列交叉连接检索到的记录数将等于6*8=48行。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT type,pub_name<br>　　FROM titles CROSS JOIN publishers<br>　　ORDER BY type<br></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnitblog.com/asfman/aggbug/25288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:09 <a href="http://www.cnitblog.com/asfman/articles/25288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用SQL数据库查询语句精华使用简介(一)</title><link>http://www.cnitblog.com/asfman/articles/25289.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:09:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25289.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25289.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25289.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25289.html</trackback:ping><description><![CDATA[<div class=adtext style="FLOAT: right"><iframe name=google_ads_frame marginWidth=0 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6469793424637365&amp;dt=1175731600578&amp;lmt=1175731600&amp;alt_color=F3F3F3&amp;format=180x150_as&amp;output=html&amp;channel=3456156516&amp;url=http%3A%2F%2Fwww.cnbruce.com%2Fblog%2Fshowlog.asp%3Fcat_id%3D29%26log_id%3D785&amp;color_bg=F3F3F3&amp;color_text=191919&amp;color_link=191919&amp;color_url=000000&amp;color_border=F3F3F3&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.cnbruce.com%2Fblog%2Findex.asp%3Fvt%3Dsearch&amp;cc=397&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true" frameBorder=0 width=180 scrolling=no height=150 allowTransparency></iframe></div>
ChinaITLab收集整理<br><br><strong>一、 简单查询</strong><br>　　<br>简单的Transact-SQL查询只包括<strong>选择列表、FROM子句和WHERE子句</strong>。它们分别说明所查询列、查询的表或视图、以及搜索条件等。<br>　　<br>例如，下面的语句查询testtable表中姓名为&#8220;张三&#8221;的nickname字段和email字段。<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT nickname,email<br>　　FROM testtable<br>　　WHERE name='张三'<br><br></td>
        </tr>
    </tbody>
</table>
　　<br><strong>(一) 选择列表</strong><br>　　<br>选择列表(select_list)指出所查询列，它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。<br>　　<br>1、选择所有列<br>　　<br>例如，下面语句显示testtable表中所有列的数据：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT *<br>　　FROM testtable<br><br></td>
        </tr>
    </tbody>
</table>
<br>2、选择部分列并指定它们的显示次序<br>　　<br>查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT nickname,email<br>　　FROM testtable<br><br></td>
        </tr>
    </tbody>
</table>
<br>3、更改列标题<br>　　<br>在选择列表中，可重新指定列标题。定义格式为：<br>　　<br>　　列标题=列名<br>　　列名 列标题<br>　　<br>如果指定的列标题不是标准的标识符格式时，应使用引号定界符，例如，下列语句使用汉字显示列标题：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT 昵称=nickname,电子邮件=email<br>　　FROM testtable<br><br></td>
        </tr>
    </tbody>
</table>
　　<br>4、删除重复行<br>　　<br>SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行，默认为ALL。使用DISTINCT选项时，对于所有重复的数据行在SELECT返回的结果集合中只保留一行。<br>　　<br>5、限制返回的行数<br>　　<br>使用TOP n [PERCENT]选项限制返回的数据行数，TOP n说明返回n行，而TOP n PERCENT时，说明n是表示一百分数，指定返回的行数等于总行数的百分之几。例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable<br><br></td>
        </tr>
    </tbody>
</table>
<br><br><strong>(二) FROM子句</strong><br>　　<br>FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图，它们之间用逗号分隔。<br>　　<br>在FROM子句同时指定多个表或视图时，如果选择列表中存在同名列，这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列，在查询两个表中的cityid时应使用下面语句格式加以限定：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT username,citytable.cityid<br>　　FROM usertable,citytable<br>　　WHERE usertable.cityid=citytable.cityid<br><br></td>
        </tr>
    </tbody>
</table>
<br>在FROM子句中可用以下两种格式为表或视图指定别名：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　表名 as 别名<br>　　表名 别名<br><br></td>
        </tr>
    </tbody>
</table>
　　<br>例如上面语句可用表的别名格式表示为：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT username,b.cityid<br>　　FROM usertable a,citytable b<br>　　WHERE a.cityid=b.cityid<br><br></td>
        </tr>
    </tbody>
</table>
<br>SELECT不仅能从表或视图中检索数据，它还能够从其它查询语句所返回的结果集合中查询数据。例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT a.au_fname+a.au_lname<br>　　FROM authors a,titleauthor ta<br>　　(SELECT title_id,title<br>　　FROM titles<br>　　WHERE ytd_sales&gt;10000<br>　　) AS t<br>　　WHERE a.au_id=ta.au_id<br>　　AND ta.title_id=t.title_id<br><br></td>
        </tr>
    </tbody>
</table>
<br>此例中，将SELECT返回的结果集合给予一别名t，然后再从中检索数据。<br><br><strong>(三) 使用WHERE子句设置查询条件</strong><br>　　<br>WHERE子句设置查询条件，过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT *<br>　　FROM usertable<br>　　WHERE age&gt;20<br><br></td>
        </tr>
    </tbody>
</table>
<br>WHERE子句可包括各种条件运算符：<br>　　<br>　　比较运算符(大小比较)：&gt;、&gt;=、=、&lt;、&lt;=、&lt;&gt;、!&gt;、!&lt;<br>　　范围运算符(表达式值是否在指定的范围)：BETWEEN&#8230;AND&#8230;<br>　　NOT BETWEEN&#8230;AND&#8230;<br>　　列表运算符(判断表达式是否为列表中的指定项)：IN (项1,项2&#8230;&#8230;)<br>　　NOT IN (项1,项2&#8230;&#8230;)<br>　　模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE<br>　　空值判断符(判断表达式是否为空)：IS NULL、NOT IS NULL<br>　　逻辑运算符(用于多条件的逻辑连接)：NOT、AND、OR<br>　　<br>1、范围运算符例：age BETWEEN 10 AND 30相当于age&gt;=10 AND age&lt;=30<br>　　<br>2、列表运算符例：country IN ('Germany','China')<br>　　<br>3、模式匹配符例：常用于模糊查找，它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。<br>　　<br><strong>可使用以下通配字符：</strong><br>　　<br>　　百分号%：可匹配任意类型和长度的字符，如果是中文，请使用两个百分号即%%。<br>　　<br>　　下划线_：匹配单个任意字符，它常用来限制表达式的字符长度。<br>　　<br>　　方括号[]：指定一个字符、字符串或范围，要求所匹配对象为它们中的任一个。[^]：其取值也[] 相同，但它要求所匹配对象为指定字符以外的任一个字符。<br>　　<br>例如：<br>　　<br>　　限制以Publishing结尾，使用LIKE '%Publishing'<br>　　<br>　　限制以A开头：LIKE '[A]%'<br>　　<br>　　限制以A开头外：LIKE '[^A]%'<br>　　<br>4、空值判断符例WHERE age IS NULL<br>　　<br>5、逻辑运算符：优先级为NOT、AND、OR<br>　　<br><strong>(四)查询结果排序</strong><br>　　<br>使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　ORDER BY {column_name [ASC|DESC]} [,&#8230;n]<br><br></td>
        </tr>
    </tbody>
</table>
　　<br>其中ASC表示升序，为默认值，DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排序。例如：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>　　<br>　　SELECT *<br>　　FROM usertable<br>　　ORDER BY age desc,userid ASC<br><br></td>
        </tr>
    </tbody>
</table>
<br>另外，可以根据表达式进行排序。<br>　　
<img src ="http://www.cnitblog.com/asfman/aggbug/25289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:09 <a href="http://www.cnitblog.com/asfman/articles/25289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ADO Command 对象</title><link>http://www.cnitblog.com/asfman/articles/25287.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:07:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25287.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25287.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25287.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25287.html</trackback:ping><description><![CDATA[<strong>Command 对象</strong>定义了将对数据源执行的指定命令。<br><br><a href="http://www.cnbruce.com/blog/uploadfile/JPG/2006-10/9-61337-ADO-Command.jpg" rel=lightbox[roadtrip]><img src="http://www.cnbruce.com/blog/uploadfile/JPG/2006-10/9-61337-ADO-Command.jpg" border=0></a><br><br>使用 Command 对象查询数据库并返回 Recordset 对象中的记录，以便执行大量操作或处理数据库结构。取决于提供者的功能，某些 Command 集合、方法或属性被引用时可能会产生错误。<br><br>可以使用 Command 对象的集合、方法、属性进行下列操作： <br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>使用 CommandText 属性定义命令（例如，SQL 语句）的可执行文本。<br><br>通过 Parameter 对象和 Parameters 集合定义参数化查询或存储过程参数。<br><br>可使用 Execute 方法执行命令并在适当的时候返回 Recordset 对象。<br><br>执行前应使用 CommandType 属性指定命令类型以优化性能。<br><br>使用 Prepared 属性决定提供者是否在执行前保存准备好（或编译好）的命令版本。<br><br>使用 CommandTimeout 属性设置提供者等待命令执行的秒数。<br><br>通过设置 ActiveConnection 属性使打开的连接与 Command 对象关联。<br><br>设置 Name 属性将 Command 标识为与 Connection 对象关联的方法。<br><br>将 Command 对象传送给 Recordset 的 Source 属性以便获取数据。 <br><br></td>
        </tr>
    </tbody>
</table>
<br><strong>注意</strong> 如果不想使用 Command 对象执行查询，请将查询字符串传送给<a class=blog_content href="http://www.cnbruce.com/blog/showlog.asp?cat_id=29&amp;log_id=696" target=_blank>Connection 对象</a>的 Execute 方法或 Recordset 对象的 Open 方法。但是，<strong>当需要使命令文本具有持久性并重新执行它，或使用查询参数时，则必须使用 Command 对象</strong>。<br><br>要独立于先前已定义的 Connection 对象创建 Command 对象，请将它的 ActiveConnection 属性设置为有效的连接字符串。ADO 仍将创建 Connection 对象，但它不会将该对象赋给对象变量。但是，如果正在将多个 Command 对象与同一个连接关联，则必须显式创建并打开 Connection 对象，这样即可将 Connection 对象赋给对象变量。如果没有将 Command 对象的 ActiveConnection 属性设置为该对象变量，则即使使用相同的连接字符串，ADO 也将为每个 Command 对象创建新的 Connection 对象。<br><br>要执行 Command，只需通过它所关联的 Connection 对象的 Name 属性，将其简单调用即可。必须将 Command 的 ActiveConnection 属性设置为 Connection 对象。如果 Command 带有参数，则将这些参数的值作为参数传送给方法。<br><br>如果在相同连接上执行两个或多个 Command 对象，并且某个 Command 对象是带输出参数的存储过程，这时会发生错误。要执行各个 Command 对象，请使用独立的连接或将所有其他 Command 对象的连接断开。<br><br>================================================<br><br>&lt;%<br>Set conn = Server.CreateObject("ADODB.Connection")<br>Set cmd = Server.CreateObject("ADODB.Command")<br>conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &amp; Server.MapPath("db1.mdb")<br><br>cmd.ActiveConnection = conn <br><font color=#999999>'ActiveConnection属性使打开的连接与 Command 对象关联</font><br>cmd.CommandText = "getdata" <br><font color=#999999>'CommandText 属性定义命令，可在ACCESS的查询表中建立查询表（表名亦即存储过程名称），或直接书写SQL语句</font><br>Set rs = cmd.Execute <br><font color=#999999>'Execute 方法执行命令并在适当的时候返回 Recordset 对象</font><br>'..............<br>'应用rs，可输出记录<br>%&gt;
<img src ="http://www.cnitblog.com/asfman/aggbug/25287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:07 <a href="http://www.cnitblog.com/asfman/articles/25287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关SQL模糊查询 </title><link>http://www.cnitblog.com/asfman/articles/25286.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:05:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25286.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25286.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25286.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25286.html</trackback:ping><description><![CDATA[<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>SELECT * FROM user WHERE name LIKE ';%三%';<br>将会把name为&#8220;张三&#8221;，&#8220;三脚猫&#8221;，&#8220;唐三藏&#8221;等等有&#8220;三&#8221;的全找出来；<br><br></td>
        </tr>
    </tbody>
</table>
<br>其中LIKE ';%三%'明显多了个分号&#8220;;&#8221;，这还能搜索得出来么？估计是编辑器编译的缘故。<br><br>======重新编辑文如下：<br><br>在进行数据库查询时，有完整查询和模糊查询之分。<br><br>一般模糊语句如下：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>SELECT 字段 FROM 表 WHERE 某字段 Like 条件<br></td>
        </tr>
    </tbody>
</table>
<br><br>其中关于条件，SQL提供了四种匹配模式：<br><br><strong>1，%</strong>：表示任意0个或多个字符。可匹配任意类型和长度的字符，<font color=#666>有些情况下若是中文，请使用两个百分号（%%）表示</font>。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'<br><br>将会把u_name为&#8220;张三&#8221;，&#8220;张猫三&#8221;、&#8220;三脚猫&#8221;，&#8220;唐三藏&#8221;等等有&#8220;三&#8221;的记录全找出来。<br><br>另外，如果需要找出u_name中既有&#8220;三&#8221;又有&#8220;猫&#8221;的记录，请使用and条件<br>SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'<br><br>若使用 <font color=#666>SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'</font> <br>虽然能搜索出&#8220;三脚猫&#8221;，但不能搜索出符合条件的&#8220;张猫三&#8221;。<br><br><strong>2，_</strong>： 表示任意单个字符。匹配单个任意字符，它常用来限制表达式的字符长度语句：<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'<br>只找出&#8220;唐三藏&#8221;这样u_name为三个字且中间一个字是&#8220;三&#8221;的；<br><br>再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';<br>只找出&#8220;三脚猫&#8221;这样name为三个字且第一个字是&#8220;三&#8221;的；<br><br><br><strong>3，[ ]</strong>：表示括号内所列字符中的一个（类似正则表达式）。指定一个字符、字符串或范围，要求所匹配对象为它们中的任一个。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'<br>将找出&#8220;张三&#8221;、&#8220;李三&#8221;、&#8220;王三&#8221;（而不是&#8220;张李王三&#8221;）；<br><br>如 [ ] 内有一系列字符（01234、abcde之类的）则可略写为&#8220;0-4&#8221;、&#8220;a-e&#8221;<br>SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'<br>将找出&#8220;老1&#8221;、&#8220;老2&#8221;、&#8230;&#8230;、&#8220;老9&#8221;；<br><br><strong>4，[^ ] </strong>：表示不在括号所列之内的单个字符。其取值和 [] 相同，但它要求所匹配对象为指定字符以外的任一个字符。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'<br>将找出不姓&#8220;张&#8221;、&#8220;李&#8221;、&#8220;王&#8221;的&#8220;赵三&#8221;、&#8220;孙三&#8221;等；<br><br>SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';<br>将排除&#8220;老1&#8221;到&#8220;老4&#8221;，寻找&#8220;老5&#8221;、&#8220;老6&#8221;、&#8230;&#8230;<br><br><strong>5，查询内容包含通配符时</strong><br><br>由于通配符的缘故，导致我们查询特殊字符&#8220;%&#8221;、&#8220;_&#8221;、&#8220;[&#8221;的语句无法正常实现，而把特殊字符用&#8220;[ ]&#8221;括起便可正常查询。据此我们写出以下函数：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>function sqlencode(str)<br>str=replace(str,"[","[[]") '此句一定要在最前<br>str=replace(str,"_","[_]")<br>str=replace(str,"%","[%]")<br>sqlencode=str<br>end function<br><br></td>
        </tr>
    </tbody>
</table>
<br>在查询前将待查字符串先经该函数处理即可。<br>
<img src ="http://www.cnitblog.com/asfman/aggbug/25286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:05 <a href="http://www.cnitblog.com/asfman/articles/25286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>精妙SQL语句</title><link>http://www.cnitblog.com/asfman/articles/25285.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Thu, 05 Apr 2007 00:03:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/25285.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/25285.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/25285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/25285.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/25285.html</trackback:ping><description><![CDATA[<p>精妙SQL语句&nbsp;&nbsp;&nbsp;&nbsp; 选择自 csdntoll 的 Blog&nbsp; <br>关键字&nbsp;&nbsp; SQL <br>出处&nbsp;&nbsp; <a href="http://expert.csdn.net/Expert/topic/1546/1546652.xml?temp=.3089716">http://expert.csdn.net/Expert/topic/1546/1546652.xml?temp=.3089716</a> <br>&nbsp;<br>&nbsp;详细的请看原贴 ^_^</p>
<p>说明：复制表(只复制结构,源表名：a 新表名：b)<br>SQL: select * into b from a where 1&lt;&gt;1</p>
<p>说明：拷贝表(拷贝数据,源表名：a 目标表名：b)<br>SQL: insert into b(a, b, c) select d,e,f from b;</p>
<p>说明：显示文章、提交人和最后回复时间<br>SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b</p>
<p>说明：外连接查询(表名1：a 表名2：b)<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</p>
<p>说明：日程安排提前五分钟提醒<br>SQL:&nbsp; select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5</p>
<p><br>说明：两张关联表，删除主表中已经在副表中没有的信息<br>SQL:&nbsp; <br>delete from info where not exists ( select * from infobz where info.infid=infobz.infid ) </p>
<p>说明：--<br>SQL:&nbsp; <br>SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE<br>&nbsp; FROM TABLE1, <br>&nbsp;&nbsp;&nbsp; (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TABLE2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT NUM, UPD_DATE, STOCK_ONHAND<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TABLE2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') &amp;brvbar;&amp;brvbar; '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE X.NUM = Y.NUM （+）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) &lt;&gt; X.STOCK_ONHAND ) B<br>WHERE A.NUM = B.NUM</p>
<p>说明：--<br>SQL:&nbsp; <br>select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&amp;strdepartmentname&amp;"' and 专业名称='"&amp;strprofessionname&amp;"' order by 性别,生源地,高考总成绩</p>
<p>说明：<br>从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源）<br>SQL: <br>SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC<br>FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TELFEESTAND a, TELFEE b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE a.tel = b.telfax) a<br>GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')</p>
<p>说明：四表联查问题：<br>SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c&nbsp; inner join d on a.a=d.d where .....</p>
<p>说明：得到表中最小的未使用的ID号<br>SQL:<br>SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID<br>&nbsp;FROM&nbsp; Handle<br>&nbsp;WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)</p>
<p>&nbsp;<br></p>
<img src ="http://www.cnitblog.com/asfman/aggbug/25285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2007-04-05 08:03 <a href="http://www.cnitblog.com/asfman/articles/25285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图片飘飘</title><link>http://www.cnitblog.com/asfman/articles/17765.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 09 Oct 2006 07:50:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/17765.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/17765.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/17765.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/17765.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/17765.html</trackback:ping><description><![CDATA[javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);<img src ="http://www.cnitblog.com/asfman/aggbug/17765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2006-10-09 15:50 <a href="http://www.cnitblog.com/asfman/articles/17765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转) 整理一下SQLSERVER的排序规则</title><link>http://www.cnitblog.com/asfman/articles/7858.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 20 Mar 2006 15:49:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/7858.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/7858.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/7858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/7858.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/7858.html</trackback:ping><description><![CDATA[SQL　SERVER的排序规则平时使用不是很多，也许不少初学者还比较陌生，但有<br />一个错误大家应是经常碰到: SQL SERVER数据库，在跨库多表连接查询时，若两数据<br />库默认字符集不同，系统就会返回这样的错误： <br /><br />“无法解决 equal to 操作的排序规则冲突。”<br /><br />一.错误分析：<br />　　这个错误是因为排序规则不一致造成的，我们做个测试，比如：<br />create table #t1(<br />name varchar(20) collate Albanian_CI_AI_WS, <br />value int)<br /><br />create table #t2(<br />name varchar(20) collate Chinese_PRC_CI_AI_WS, <br />value int )<br /><br />表建好后，执行连接查询：<br /><br />select * from #t1 A inner join #t2 B on A.name=B.name <br /><br />这样，错误就出现了：<br /><br />服务器: 消息 446，级别 16，状态 9，行 1<br />无法解决 equal to 操作的排序规则冲突。<br />　　要排除这个错误，最简单方法是，表连接时指定它的排序规则，这样错误就<br />不再出现了。语句这样写：<br /><br />select * <br />from #t1 A inner join #t2 B <br />on A.name=B.name collate Chinese_PRC_CI_AI_WS<br /><br />二.排序规则简介：<br /><br />什么叫排序规则呢？MS是这样描述的："在 Microsoft SQL Server 2000 中，<br />字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存<br />储和比较字符所使用的规则。"<br />　　在查询分析器内执行下面语句，可以得到SQL　SERVER支持的所有排序规则。<br /><br />　　　　select * from ::fn_helpcollations() <br /><br />排序规则名称由两部份构成，前半部份是指本排序规则所支持的字符集。<br />如：<br />　　Chinese_PRC_CS_AI_WS <br />前半部份：指UNICODE字符集，Chinese_PRC_指针对大陆简体字UNICODE的排序规则。<br />排序规则的后半部份即后缀 含义： <br />　　_BIN 二进制排序 <br />　　_CI(CS) 是否区分大小写，CI不区分，CS区分<br />　　_AI(AS) 是否区分重音，AI不区分，AS区分　　　<br />　　_KI(KS) 是否区分假名类型,KI不区分，KS区分　<br />_WI(WS) 是否区分宽度 WI不区分，WS区分　<br /><br />区分大小写:如果想让比较将大写字母和小写字母视为不等，请选择该选项。<br />区分重音:如果想让比较将重音和非重音字母视为不等，请选择该选项。如果选择该选项，<br />比较还将重音不同的字母视为不等。<br />区分假名:如果想让比较将片假名和平假名日语音节视为不等，请选择该选项。<br />区分宽度:如果想让比较将半角字符和全角字符视为不等，请选择该选项<br /><br /><br />三.排序规则的应用：<br />　　SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则，但它的应用往往<br />被开发人员所忽略。其实它在实践中大有用处。<br /><br />　　例1:让表NAME列的内容按拼音排序：<br /><br />create table #t(id int,name varchar(20))<br />insert #t select 1,'中'<br />union all select 2,'国'<br />union all select 3,'人'<br />union all select 4,'阿'<br /><br />select * from #t order by name collate Chinese_PRC_CS_AS_KS_WS <br />drop table #t<br />/*结果：<br />id name <br />----------- -------------------- <br />4 阿<br />2 国<br />3 人<br />1 中<br />*/<br /><br />　　例2：让表NAME列的内容按姓氏笔划排序：<br /><br />create table #t(id int,name varchar(20))<br /><br />insert #t select 1,'三'<br />union all select 2,'乙'<br />union all select 3,'二'<br />union all select 4,'一'<br />union all select 5,'十'<br />select * from #t order by name collate Chinese_PRC_Stroke_CS_AS_KS_WS <br />drop table #t<br />/*结果：<br />id name <br />----------- -------------------- <br />4 一<br />2 乙<br />3 二<br />5 十<br />1 三<br />*/<br /><br />四.在实践中排序规则应用的扩展<br />　　SQL SERVER汉字排序规则可以按拼音、笔划等排序，那么我们如何利用这种功能<br />来处理汉字的一些难题呢？我现在举个例子：<br /><br />　　　　　　　　　　用排序规则的特性计算汉字笔划<br /><br />　　要计算汉字笔划，我们得先做准备工作，我们知道，WINDOWS多国汉字，UNICODE目前<br />收录汉字共20902个。简体GBK码汉字UNICODE值从19968开始。<br />　　首先，我们先用SQLSERVER方法得到所有汉字，不用字典，我们简单利用SQL语句就<br />可以得到：<br /><br />select top 20902 code=identity(int,19968,1) into #t from syscolumns a,syscolumns b<br /><br />再用以下语句，我们就得到所有汉字，它是按UNICODE值排序的：<br /><br />　　select code,nchar(code) as CNWord from #t <br /><br />　　然后，我们用Select语句，让它按笔划排序。<br /><br />select code,nchar(code) as CNWord <br />from #t <br />order by nchar(code) collate Chinese_PRC_Stroke_CS_AS_KS_WS,code<br /><br />结果：<br />code CNWord <br />----------- ------ <br />19968 一<br />20008 丨<br />20022 丶<br />20031 丿<br />20032 乀<br />20033 乁<br />20057 乙<br />20058 乚<br />20059 乛<br />20101 亅<br />19969 丁<br />..........<br /><br />　 从上面的结果，我们可以清楚的看到，一笔的汉字，code是从19968到20101，从小到大排，但到<br />了二笔汉字的第一个字“丁”，CODE为19969，就不按顺序而重新开始了。有了这结果，我们就可以轻<br />松的用SQL语句得到每种笔划汉字归类的第一个或最后一个汉字。<br />下面用语句得到最后一个汉字：<br /><br />create table #t1(id int identity,code int,cnword nvarchar(2))<br /><br />insert #t1(code,cnword)<br />select code,nchar(code) as CNWord from #t <br />order by nchar(code) collate Chinese_PRC_Stroke_CS_AS_KS_WS,code<br /><br />select A.cnword <br />from #t1 A <br />left join #t1 B on A.id=B.id-1 and A.code&lt;B.code <br />where B.code is null<br />order by A.id<br /><br />得到36个汉字，每个汉字都是每种笔划数按Chinese_PRC_Stroke_CS_AS_KS_WS排序规则排序后的<br />最后一个汉字：<br /><br />亅阝马风龙齐龟齿鸩龀龛龂龆龈龊龍龠龎龐龑龡龢龝齹龣龥齈龞麷鸞麣龖龗齾齉龘<br /><br />　　上面可以看出：“亅”是所有一笔汉字排序后的最后一个字，“阝”是所有二笔汉字排序后的最后<br />一个字......等等。<br />　　但同时也发现，从第33个汉字“龗(33笔)”后面的笔划有些乱，不正确。但没关系，比“龗”笔划<br />多的只有四个汉字，我们手工加上：齾35笔，齉36笔，靐39笔，龘64笔<br /><br />建汉字笔划表（TAB_HZBH）：<br />create table tab_hzbh(id int identity,cnword nchar(1))<br />--先插入前33个汉字<br />insert tab_hzbh<br />select top 33 A.cnword <br />from #t1 A <br />left join #t1 B on A.id=B.id-1 and A.code&lt;B.code <br />where B.code is null<br />order by A.id<br />--再加最后四个汉字<br />set identity_insert tab_hzbh on<br />go<br />insert tab_hzbh(id,cnword)<br />　　　　　select 35,N'齾'<br />union all select 36,N'齉'<br />union all select 39,N'靐'<br />union all select 64,N'龘'<br />go<br />set identity_insert tab_hzbh off<br />go<br /><br />　　到此为止，我们可以得到结果了，比如我们想得到汉字“国”的笔划：<br /><br />declare @a nchar(1)<br />set @a='国'<br />select top 1 id <br />from tab_hzbh <br />where cnword&gt;=@a collate Chinese_PRC_Stroke_CS_AS_KS_WS<br />order by id<br /><br />id <br />----------- <br />8<br />(结果：汉字“国”笔划数为8)<br /><br />　　上面所有准备过程，只是为了写下面这个函数，这个函数撇开上面建的所有临时表和固<br />定表，为了通用和代码转移方便，把表tab_hzbh的内容写在语句内，然后计算用户输入一串<br />汉字的总笔划：<br /><br />create function fun_getbh(@str nvarchar(4000))<br />returns int<br />as<br />begin<br />declare @word nchar(1),@n int<br />set @n=0<br />while len(@str)&gt;0<br />begin<br />set @word=left(@str,1)<br />--如果非汉字，笔划当0计<br />set @n=@n+(case when unicode(@word) between 19968 and 19968+20901<br />then (select top 1 id from (<br />select 1 as id,N'亅' as word <br />union all select 2,N'阝' <br />union all select 3,N'马' <br />union all select 4,N'风' <br />union all select 5,N'龙' <br />union all select 6,N'齐' <br />union all select 7,N'龟' <br />union all select 8,N'齿' <br />union all select 9,N'鸩' <br />union all select 10,N'龀' <br />union all select 11,N'龛' <br />union all select 12,N'龂' <br />union all select 13,N'龆' <br />union all select 14,N'龈' <br />union all select 15,N'龊' <br />union all select 16,N'龍' <br />union all select 17,N'龠' <br />union all select 18,N'龎' <br />union all select 19,N'龐' <br />union all select 20,N'龑' <br />union all select 21,N'龡' <br />union all select 22,N'龢' <br />union all select 23,N'龝' <br />union all select 24,N'齹' <br />union all select 25,N'龣' <br />union all select 26,N'龥' <br />union all select 27,N'齈' <br />union all select 28,N'龞' <br />union all select 29,N'麷' <br />union all select 30,N'鸞' <br />union all select 31,N'麣' <br />union all select 32,N'龖' <br />union all select 33,N'龗' <br />union all select 35,N'齾' <br />union all select 36,N'齉' <br />union all select 39,N'靐' <br />union all select 64,N'龘' <br />) T <br />where word&gt;=@word collate Chinese_PRC_Stroke_CS_AS_KS_WS<br />order by id ASC) else 0 end)<br />set @str=right(@str,len(@str)-1)<br />end<br />return @n<br />end<br /><br />--函数调用实例：<br />select dbo.fun_getbh('中华人民共和国'),dbo.fun_getbh('中華人民共和國')<br />　<br />　　执行结果：笔划总数分别为39和46，简繁体都行。<br /><br />当然，你也可以把上面“UNION　ALL”内的汉字和笔划改存在固定表内，在汉字<br />列建CLUSTERED INDEX，列排序规则设定为：<br />　　　 Chinese_PRC_Stroke_CS_AS_KS_WS<br />这样速度更快。如果你用的是BIG5码的操作系统，你得另外生成汉字，方法一样。<br />但有一点要记住：这些汉字是通过SQL语句Select出来的，不是手工输入的，更不<br />是查字典得来的，因为新华字典毕竟不同于UNICODE字符集，查字典的结果会不正<br />确。<br /><br />　　<br />　　　　用排序规则的特性得到汉字拼音首字母<br /><br />　　用得到笔划总数相同的方法，我们也可以写出求汉字拼音首字母的函数。如下：<br /><br />create function fun_getPY(@str nvarchar(4000))<br />returns nvarchar(4000)<br />as<br />begin<br />declare @word nchar(1),@PY nvarchar(4000)<br />set @PY=''<br />while len(@str)&gt;0<br />begin<br />set @word=left(@str,1)<br />--如果非汉字字符，返回原字符<br />set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901<br />then (select top 1 PY from (<br />select 'A' as PY,N'驁' as word<br />union all select 'B',N'簿'<br />union all select 'C',N'錯'<br />union all select 'D',N'鵽'<br />union all select 'E',N'樲'<br />union all select 'F',N'鰒'<br />union all select 'G',N'腂'<br />union all select 'H',N'夻'<br />union all select 'J',N'攈'<br />union all select 'K',N'穒'<br />union all select 'L',N'鱳'<br />union all select 'M',N'旀'<br />union all select 'N',N'桛'<br />union all select 'O',N'漚'<br />union all select 'P',N'曝'<br />union all select 'Q',N'囕'<br />union all select 'R',N'鶸'<br />union all select 'S',N'蜶'<br />union all select 'T',N'籜'<br />union all select 'W',N'鶩'<br />union all select 'X',N'鑂'<br />union all select 'Y',N'韻'<br />union all select 'Z',N'咗'<br />) T <br />where word&gt;=@word collate Chinese_PRC_CS_AS_KS_WS <br />order by PY ASC) else @word end)<br />set @str=right(@str,len(@str)-1)<br />end<br />return @PY<br />end<br /><br />--函数调用实例：<br />select dbo.fun_getPY('中华人民共和国'),dbo.fun_getPY('中華人民共和國')<br />结果都为：ZHRMGHG<br /><br />　 你若有兴趣，也可用相同的方法，扩展为得到汉字全拼的函数，甚至还可以得到全拼的读<br />音声调，不过全拼分类大多了。得到全拼最好是用对照表，两万多汉字搜索速度很快，用对照<br />表还可以充分利用表的索引。<br />排序规则还有很多其它的巧妙用法。欢迎大家共同探讨。<img src ="http://www.cnitblog.com/asfman/aggbug/7858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2006-03-20 23:49 <a href="http://www.cnitblog.com/asfman/articles/7858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转) 取一表前N条记录，各个数据库的SQL写法</title><link>http://www.cnitblog.com/asfman/articles/7856.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 20 Mar 2006 15:48:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/7856.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/7856.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/7856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/7856.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/7856.html</trackback:ping><description><![CDATA[花了点时间整理了一下<br /><br />取一表前N条记录，各个数据库的SQL写法<br /><br />1. orACLE <br />Select * FROM TABLE1 Where ROWNUM&lt;=N <br />2. INFORMIX <br />Select FIRST N * FROM TABLE1 <br />3. DB2 <br />Select * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM Where ROWNUM&lt;=N <br />DB2 <br />Select COLUMN FROM TABLE FETCH FIRST N ROWS ONLY <br />4. SQL SERVER <br />Select TOP N * FROM TABLE1 <br />5. SYBASE <br />Select TOP N * FROM TABLE1 <br />6. mysql: <br />select * from table_name limit N<br /><br /><img src ="http://www.cnitblog.com/asfman/aggbug/7856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2006-03-20 23:48 <a href="http://www.cnitblog.com/asfman/articles/7856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转) 如何在SQLSERVER中快速有条件删除海量数据</title><link>http://www.cnitblog.com/asfman/articles/7857.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 20 Mar 2006 15:48:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/7857.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/7857.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/7857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/7857.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/7857.html</trackback:ping><description><![CDATA[最近有个朋友问我，他说他在SQLSERVER删除几百万到几千万数据是显的很慢，帮他分析了一下，提了一些以下意见，或许对很多人有用，再者也好长没写过BLOG了，一起探讨一下<br /><br />如果你的硬盘空间小，并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录)，而且对速度要求比较高，并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作，不产生rollback，不写日志速度快一些，然后如果有自增的话，恢复到1开始，而delete会产生rollback，如果删除大数据量的表速度会很慢，同时会占用很多的rollback segments，同时还要记录下G级别的日志 ；当然如果有条件删除比如where time&lt;'2006-3-10' 怎么办，能不能不记录日志用delete，回答是不行的，SQL Server 引擎在设计上就会对 Delete 操作进行日志记录。至今没有办法强制制定某一些语句不记录到日志中，如果在执行 Delete Table1 where Time &lt; '2006-3-10' 由于涉及的记录比较多,所以日志记录也相应很大(3-4G),如果可行,我建议用以下方式：<br /><br />选出您所需要保留的记录到新的表。如果您使用 Full Recovery Mode<br />根据Select INTO的记录数,日志可能会比较大<br />Select * into Table2 From Table1 Where Time &gt; = '2006-03-10' <br /><br />然后直接Truncate Table1。无论何种恢复模式都不会进行日志记录<br />Truncate table Table1<br /><br />最后对Table2进行改名为Table1<br />EC sp_rename 'Table2', 'Table1'<img src ="http://www.cnitblog.com/asfman/aggbug/7857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2006-03-20 23:48 <a href="http://www.cnitblog.com/asfman/articles/7857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转) SQLSERVER类似Split的函数</title><link>http://www.cnitblog.com/asfman/articles/7855.html</link><dc:creator>汪杰</dc:creator><author>汪杰</author><pubDate>Mon, 20 Mar 2006 15:47:00 GMT</pubDate><guid>http://www.cnitblog.com/asfman/articles/7855.html</guid><wfw:comment>http://www.cnitblog.com/asfman/comments/7855.html</wfw:comment><comments>http://www.cnitblog.com/asfman/articles/7855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/asfman/comments/commentRss/7855.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/asfman/services/trackbacks/7855.html</trackback:ping><description><![CDATA[因查询统计需要，今天早上在SQLSERVER里写了一个类似于Split的函数，如下<br /><br />create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))<br />returns @temp table(a varchar(100))<br />--实现split功能 的函数<br />--date :2005-4-20<br />--Author :Domino<br />as <br />begin<br />declare @i int<br />set @SourceSql=rtrim(ltrim(@SourceSql))<br />set @i=charindex(@StrSeprate,@SourceSql)<br />while @i&gt;=1<br />begin<br />insert @temp values(left(@SourceSql,@i-1))<br />set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)<br />set @i=charindex(@StrSeprate,@SourceSql)<br />end<br />if @SourceSql&lt;&gt;'\'<br />insert @temp values(@SourceSql)<br />return <br />end<br /><br /><br />用法：select * from dbo.f_split('A:B:C:D:E',':')<br /><img src ="http://www.cnitblog.com/asfman/aggbug/7855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/asfman/" target="_blank">汪杰</a> 2006-03-20 23:47 <a href="http://www.cnitblog.com/asfman/articles/7855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>