<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://www.flashman.cn">
<title>我的爱链</title>
<link>http://www.flashman.cn</link>
<description>我的爱链</description>
<dc:language>zh-cn</dc:language>
<dc:creator>puter2001@21cn.com</dc:creator>
<items>
<rdf:Seq>
<item rdf:about="http://www.flashman.cn/blogview.asp?logID=268"><title>五豆豆浆</title><description><![CDATA[<br>[swf]http://player.ku6.com/refer/_Zo-CdZL_Gn25txX/v.swf[/swf]]]></description><content:encoded><![CDATA[<br><div style="border:1px dotted #8394B2;border-left:4px solid #8394B2;background:#FAFCFE"><div style="background:#E4EAF2;padding:3px;font-weight:bold"><img src="images/flash.gif"> Flash</div><div style="padding:6px"><a href="javascript:hidden(temp5894)"><img border="0" src="images/hidden.gif" width="16" height="12"> 打开/隐藏Flash动画</a><div id="temp5894" style="overflow:hidden;display:none"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="530" height="400"><param name="movie" value="http://player.ku6.com/refer/_Zo-CdZL_Gn25txX/v.swf"><param name="quality" value="high"><embed src="http://player.ku6.com/refer/_Zo-CdZL_Gn25txX/v.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="530" height="400"></embed></object></div></div></div>]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=268</link><dc:subject>精彩网摘</dc:subject><dc:creator>flashman</dc:creator><dc:date>2010-02-02 08:51 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=267"><title>如何批处理拷贝文件和文件夹</title><description><![CDATA[如何批处理拷贝文件和文件夹<br><br>经常做数据备份的人很清楚，如果是少量数据或文件，简单复制即可，可是要是大量数据的话，再用这种方法，则费力费时，那么如何批处理拷贝文件和文件夹，可以用xcopy实现,例如：<br><br>C:\&gt;xcopy&nbsp;C:\ppt\*.*&nbsp;D:\ppt\&nbsp;/s&nbsp;/e]]></description><content:encoded><![CDATA[如何批处理拷贝文件和文件夹<br><br>经常做数据备份的人很清楚，如果是少量数据或文件，简单复制即可，可是要是大量数据的话，再用这种方法，则费力费时，那么如何批处理拷贝文件和文件夹，可以用xcopy实现,例如：<br><br>C:\&gt;xcopy&nbsp;C:\ppt\*.*&nbsp;D:\ppt\&nbsp;/s&nbsp;/e<br><br>这条命令的意思就是把C盘下的PPT文件夹全部拷贝到D盘<br><br>XCOPY&nbsp;还有众多的功能，&nbsp;是加参数来完成的。上面的/s&nbsp;/e&nbsp;参数的作用分别是把子目录和空目录都复制过去，一些使用举例和参数说明如下：<br>1、如只是单纯地复制&nbsp;E:\&nbsp;盘上所有文件到&nbsp;D:\&nbsp;盘上，就输入“&nbsp;xcopy&nbsp;e:\*.*&nbsp;d:&nbsp;/s&nbsp;/h&nbsp;&quot;就行啦！如果在复制过程中，你不要他复制文件啦！那就按键盘热键“Ctrl&nbsp;&quot;&nbsp;+&quot;Pause&nbsp;/break&quot;&nbsp;二个热键&nbsp;来中断复制。<br>2、如果想把E:\&nbsp;盘上所有文件复制到D:\盘上，分为今天复制一点，明天再接着复制一些，后天再接着复制一些。或者是某种原因上次没有复制完成，今天想接着复制。（这种情况是经常在复制文件中出现的）那可怎么办才好呢？<br>那就输入“&nbsp;xcopy&nbsp;e:\*.*&nbsp;d:&nbsp;/s&nbsp;/h&nbsp;/d&nbsp;/y&nbsp;”就行啦。他能查出那些文件是已经复制过去啦，那些文件还没有复制过去的。<br>3、当然我们也会碰到这种情况，一些文件我们已经修改过啦！网上面又有最新版本的啦。原来备份的那份文件我们要及时更新啦。那怎么才能同步更新呢？当然我们可以把最新的好份文件复制过去，这也是一种解决办法。<br>如果修改的文件有很多的，自己到时候也记不清楚那份文件是更新过的。这么多的原来备份的那份文件都要更新，都要复制过去，可不是件省力气的活，而且容易出错和一些文件被忘记啦！<br>那和上面一样也同样输入&quot;&nbsp;xcopy&nbsp;e:\*.*&nbsp;d:&nbsp;/s&nbsp;/h&nbsp;/d&nbsp;/y&nbsp;&quot;就行啦！<br>4、还有一种情况我们经常也碰到的，因为复制某个文件出错或者这个文件在使用中，而停止了复制工作，（比如，复制C&nbsp;盘上的&nbsp;windows&nbsp;xp&nbsp;）我们这时候想跳过某个出错的文件和某个正在使用中文件而继续复制其他文件。<br>在多加入一个参数&quot;&nbsp;/c&nbsp;&quot;就是&nbsp;&quot;&nbsp;xcopy&nbsp;e:\*.*&nbsp;d:&nbsp;/s&nbsp;/h&nbsp;/d&nbsp;/c&nbsp;/y&nbsp;&quot;就行啦！<br>5、有时候我们想XCOPY&nbsp;变为自动复制，并且复制完成后关闭电脑，可以建立一个批处理文件，新建文本文档，更名为XCOPY.BAT&nbsp;当然扩展名原来是TXT&nbsp;格式的要更名为BAT&nbsp;在这个&nbsp;XCOPY.BAT&nbsp;中输入<br>xcopy&nbsp;e:\*.*&nbsp;d:&nbsp;/s&nbsp;/h&nbsp;/c&nbsp;/y<br>shutdown&nbsp;-s<br>然后双击xcopy.bat&nbsp;运行它，你这时候可以出去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。<br><br>XCOPY&nbsp;source&nbsp;[destination]&nbsp;参数(如&nbsp;/s&nbsp;/e)<br>source&nbsp;指定要复制的文件。<br>destination&nbsp;指定新文件的位置和/或名称。<br>/A&nbsp;只复制有存档属性集的文件，<br>但不改变属性。<br>/M&nbsp;只复制有存档属性集的文件，<br>并关闭存档属性。<br>/D:m-d-y&nbsp;复制在指定日期或指定日期以后改变的文件。<br>如果没有提供日期，只复制那些源时间<br>比目标时间新的文件。<br>/EXCLUDE:file1[+file2][+file3]...<br>指定含有字符串的文件列表。如果有任何<br>字符串与要被复制的文件的绝对路径<br>相符，那个文件将不会得到复制。<br>例如，指定如&nbsp;\obj\&nbsp;或&nbsp;.obj&nbsp;的字符串会排除<br>目录&nbsp;obj&nbsp;下面的所有文件或带有<br>.obj&nbsp;扩展名的文件。<br>/P&nbsp;创建每个目标文件前提示。<br>/S&nbsp;复制目录和子目录，除了空的。<br>/E&nbsp;复制目录和子目录，包括空的。<br>与&nbsp;/S&nbsp;/E&nbsp;相同。可以用来修改&nbsp;/T。<br>/V&nbsp;验证每个新文件。<br>/W&nbsp;提示您在复制前按键。<br>/C&nbsp;即使有错误，也继续复制。<br>/I&nbsp;如果目标不存在，又在复制一个以上的文件，<br>则假定目标一定是一个目录。<br>/Q&nbsp;复制时不显示文件名。<br>/F&nbsp;复制时显示完整的源和目标文件名。<br>/L&nbsp;显示要复制的文件。<br>/G&nbsp;允许将没有经过加密的文件复制到<br>不支持加密的目标。<br>/H&nbsp;也复制隐藏和系统文件。<br>/R&nbsp;改写只读文件。<br>/T&nbsp;创建目录结构，但不复制文件。不<br>包括空目录或子目录。/T&nbsp;/E&nbsp;包括<br>空目录和子目录。<br>/U&nbsp;只复制已经存在于目标中的文件。<br>/K&nbsp;复制属性。一般的&nbsp;Xcopy&nbsp;会重设只读属性。<br>/N&nbsp;用生成的短名复制。<br>/O&nbsp;复制文件所有权和&nbsp;ACL&nbsp;信息。<br>/X&nbsp;复制文件审核设置(隐含&nbsp;/O)。<br>/Y&nbsp;禁止提示以确认改写一个<br>现存目标文件。<br>/-Y&nbsp;导致提示以确认改写一个<br>现存目标文件。<br>/Z&nbsp;用重新启动模式复制网络文件。<br><br><br>Xcopy&nbsp;<br>复制文件和目录，包括子目录。<br><br>语法&nbsp;<br>xcopy&nbsp;Source&nbsp;[Destination]&nbsp;[/w]&nbsp;[/p]&nbsp;[/c]&nbsp;[/v]&nbsp;[/q]&nbsp;[/f]&nbsp;[/l]&nbsp;[/g]&nbsp;[/d[:mm-dd-yyyy]]&nbsp;</u>&nbsp;</i>&nbsp;[/s&nbsp;[/e]]&nbsp;[/t]&nbsp;[/k]&nbsp;[/r]&nbsp;[/h]&nbsp;[{/a|/m}]&nbsp;[/n]&nbsp;[/o]&nbsp;[/x]&nbsp;[/exclude:file1[+[file2]][+[file3]]&nbsp;[{/y|/-y}]&nbsp;[/z]<br><br>参数&nbsp;Source&nbsp;必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。&nbsp;Destination&nbsp;指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。&nbsp;/w&nbsp;在开始复制文件之前将显示以下消息并等待您的响应：&nbsp;<br>Press&nbsp;any&nbsp;key&nbsp;to&nbsp;begin&nbsp;copying&nbsp;file(s)<br><br>/p&nbsp;提示您确认是否要创建每个目标文件。&nbsp;/c&nbsp;忽略错误。&nbsp;/v&nbsp;在写入目标文件时验证每个文件，以确保目标文件与源文件完全相同。&nbsp;/q&nbsp;禁止显示&nbsp;xcopy&nbsp;消息。&nbsp;/f&nbsp;复制时显示源文件名和目标文件名。&nbsp;/l&nbsp;显示要复制的文件列表。&nbsp;/g&nbsp;创建解密的目标文件。&nbsp;/d[:mm-dd-yyyy]&nbsp;只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括&nbsp;mm-dd-yyyy&nbsp;值，xcopy&nbsp;会复制比现有&nbsp;Destination&nbsp;文件新的所有&nbsp;Source&nbsp;文件。该命令行选项使您可以更新更改过的文件。&nbsp;/u&nbsp;只从&nbsp;source&nbsp;复制&nbsp;destination&nbsp;中已有的文件。&nbsp;/i&nbsp;如果&nbsp;Source&nbsp;是一个目录或包含通配符，而&nbsp;Destination&nbsp;不存在，xcopy&nbsp;会假定&nbsp;destination&nbsp;指定目录名并创建一个新目录。然后，xcopy&nbsp;会将所有指定文件复制到新目录中。默认情况下，xcopy&nbsp;将提示您指定&nbsp;destination&nbsp;是文件还是目录。&nbsp;/s&nbsp;复制非空的目录和子目录。如果省略&nbsp;/s，xcopy&nbsp;将在一个目录中工作。&nbsp;/e&nbsp;复制所有子目录，包括空目录。同时使用&nbsp;/e、/s&nbsp;和&nbsp;/t&nbsp;命令行选项。&nbsp;/t&nbsp;只复制子目录结构（即目录树），不复制文件。要复制空目录，必须包含&nbsp;/e&nbsp;命令行选项。&nbsp;/k&nbsp;复制文件，如果源文件具有只读属性，则在目标文件中保留该属性。默认情况下，xcopy&nbsp;会删除只读属性。&nbsp;/r&nbsp;复制只读文件。&nbsp;/h&nbsp;复制具有隐藏和系统文件属性的文件。默认情况下，xcopy&nbsp;不复制隐藏或系统文件。&nbsp;/a&nbsp;只复制那些具有存档文件属性设置的源文件。/a&nbsp;不修改源文件的存档文件属性。有关如何通过使用&nbsp;attrib&nbsp;来设置存档文件属性的信息，请参阅“”。&nbsp;/m&nbsp;复制具有存档文件属性设置的源文件。与&nbsp;/a&nbsp;不同，/m&nbsp;关闭在源中指定的文件的存档文件属性。有关如何通过使用&nbsp;attrib&nbsp;来设置存档文件属性的信息，请参阅“”。&nbsp;/n&nbsp;使用&nbsp;NTFS&nbsp;短文件或目录名创建副本。将文件或目录从&nbsp;NTFS&nbsp;卷复制到&nbsp;FAT&nbsp;卷或者当目标文件系统需要&nbsp;FAT&nbsp;文件系统命名约定（即&nbsp;8.3&nbsp;个字符）时，需要&nbsp;/n。目标文件系统可以是&nbsp;FAT&nbsp;或&nbsp;NTFS。&nbsp;/o&nbsp;复制文件所有权与自由选择的访问控制列表&nbsp;(DACL)&nbsp;信息。&nbsp;/x&nbsp;复制文件审核设置和系统访问控制列表&nbsp;(SACL)&nbsp;信息（包含&nbsp;/o）。&nbsp;/exclude:filename1[+[filename2]][+[filename3]]&nbsp;指定包含字符串的文件列表。&nbsp;/y&nbsp;禁止提示您确认要覆盖现存的目标文件。&nbsp;/-y&nbsp;提示您确认要覆盖现有目标文件。&nbsp;/z&nbsp;在可重启模式中通过网络复制。&nbsp;/?&nbsp;在命令提示符显示帮助。&nbsp;注释&nbsp;使用&nbsp;/v&nbsp;<br>XOX<br><br>使用&nbsp;/exclude&nbsp;<br>列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配，就从复制进程排除该文件。例如，如果指定字符串&nbsp;&quot;\Obj\&quot;，则会排除&nbsp;Obj&nbsp;目录下的所有文件。如果指定字符串&nbsp;&quot;.obj&quot;，则排除具有&nbsp;.obj&nbsp;扩展名的所有文件。<br><br>使用&nbsp;/z&nbsp;<br>如果在复制过程中丢失连接（例如，如果用于连接的服务器脱机），复制过程将在重新建立连接后恢复。/z&nbsp;也显示每个文件完成的复制操作的百分比。<br><br>在&nbsp;COPYCMD&nbsp;环境变量中使用&nbsp;/y&nbsp;<br>可在&nbsp;COPYCMD&nbsp;环境变量中使用&nbsp;/y。在命令行上使用&nbsp;/-y&nbsp;可以覆盖该命令。默认情况下，会提示您覆盖，除非您从批处理脚本内运行&nbsp;copy。<br><br>复制加密的文件&nbsp;<br>将加密文件复制到不支持&nbsp;EFS&nbsp;的卷会导致错误。应首先解密文件或将文件复制到支持&nbsp;EFS&nbsp;的卷中。<br><br>附属文件&nbsp;<br>要附加文件，请指定单个目标文件，多个源文件（使用通配符或文件&nbsp;1&nbsp;+&nbsp;文件&nbsp;2&nbsp;+&nbsp;文件&nbsp;3&nbsp;格式）。<br><br>Destination&nbsp;的默认值&nbsp;<br>如果省略&nbsp;Destination，xcopy&nbsp;命令将文件复制到当前目录。<br><br>指定&nbsp;Destination&nbsp;是文件还是目录&nbsp;<br>如果&nbsp;Destination&nbsp;不包含现有目录且不以反斜杠&nbsp;(\)&nbsp;结尾，会出现下列消息：<br><br>Does&nbsp;destination&nbsp;specify&nbsp;a&nbsp;file&nbsp;name<br>or&nbsp;directory&nbsp;name&nbsp;on&nbsp;the&nbsp;target<br>(F&nbsp;=&nbsp;file,&nbsp;D&nbsp;=&nbsp;directory)?<br><br>如果要将一个或多个文件复制到一个文件，请按&nbsp;F。如果要将一个或多个文件复制到一个目录，请按&nbsp;D。<br><br>使用&nbsp;/i&nbsp;命令行选项可抑制显示该消息，从而导致&nbsp;xcopy&nbsp;认定在源是多个文件或一个目录的情况下，目标是一个目录。<br><br>使用&nbsp;xcopy&nbsp;命令设置&nbsp;Destination&nbsp;文件的存档属性&nbsp;<br>xcopy&nbsp;命令创建具有存档属性设置的文件，无论源文件中是否设定了此属性。有关文件属性和&nbsp;attrib&nbsp;的详细信息，请参阅“”。<br><br>比较&nbsp;xcopy&nbsp;和&nbsp;diskcopy&nbsp;<br>如果磁盘的子目录中包含文件，要将其复制到具有不同格式的磁盘中，请使用&nbsp;xcopy&nbsp;命令，而不要使用&nbsp;diskcopy。因为&nbsp;diskcopy&nbsp;命令是一个磁道接一个磁道地复制磁盘，所以需要源磁盘和目标磁盘的格式必须相同。xcopy&nbsp;命令没有该要求。通常情况下请使用&nbsp;xcopy，除非您需要完整的磁盘图像副本。<br><br>xcopy&nbsp;的退出码&nbsp;<br>要处理&nbsp;xcopy&nbsp;返回的退出码，请在批处理程序的&nbsp;if&nbsp;命令行上使用&nbsp;errorlevel&nbsp;参数。有关使用“if”处理退出码的批处理程序的范例，请参阅“”。下表列出每一个退出码和说明。<br><br>退出码说明&nbsp;0&nbsp;文件复制没有错误。&nbsp;1&nbsp;没有找到要复制的文件。&nbsp;2&nbsp;用户按&nbsp;CTRL+C&nbsp;终止了&nbsp;xcopy。&nbsp;4&nbsp;出现了初始化错误。没有足够的内存或磁盘空间，或命令行上输入了无效的驱动器名称或语法。&nbsp;5&nbsp;出现了磁盘写入错误。范例&nbsp;<br>要从驱动器&nbsp;A&nbsp;将所有文件和子目录（包括所有空的子目录）复制到驱动器&nbsp;B，请键入：<br><br>xcopy&nbsp;a:b:/s&nbsp;/e<br><br>要包含上一示例中的任何系统或隐藏文件，请按如下所示添加&nbsp;/h&nbsp;命令行选项：<br><br>xcopy&nbsp;a:b:/s&nbsp;/e&nbsp;/h<br><br>要使用&nbsp;\Rawdata&nbsp;目录中&nbsp;1993&nbsp;年&nbsp;12&nbsp;月&nbsp;29&nbsp;日后更改的文件更新&nbsp;\Reports&nbsp;目录中的文件，请键入：<br><br>xcopy&nbsp;\rawdata&nbsp;\reports&nbsp;/d:12-29-1993<br><br>要更新上例中&nbsp;\Reports&nbsp;中存在的所有文件，而不考虑日期，请键入：<br><br>xcopy&nbsp;\rawdata&nbsp;\reports&nbsp;/u<br><br>如果只想获得前一个命令要复制的文件列表，而不复制文件，请键入：<br><br>xcopy&nbsp;\rawdata&nbsp;\reports&nbsp;/d:12-29-1993&nbsp;/l&nbsp;&gt;&nbsp;xcopy.out<br><br>文件&nbsp;Xcopy.out&nbsp;列出了要复制的所有文件。<br><br>要将&nbsp;\Customer&nbsp;目录和所有子目录复制到网络驱动器&nbsp;H:&nbsp;上的目录&nbsp;\\Public\Address，保留只读属性，并在&nbsp;H:&nbsp;上创建新文件时对您做出提示，请键入：<br><br>xcopy&nbsp;\customer&nbsp;h:\public\address&nbsp;/s&nbsp;/e&nbsp;/k&nbsp;/p<br><br>要发出上一个命令，确保在&nbsp;\Address&nbsp;目录不存在时&nbsp;xcopy&nbsp;会创建该目录，同时应抑制显示创建新目录时要显示的消息，请按如下所示添加&nbsp;/i&nbsp;命令行选项：<br><br>xcopy&nbsp;\customer&nbsp;h:\public\address&nbsp;/s&nbsp;/e&nbsp;/k&nbsp;/p&nbsp;/i<br><br>可以创建批处理程序执行&nbsp;xcopy&nbsp;操作，并且使用&nbsp;if&nbsp;批处理命令在发生错误时处理退出码。例如，以下的批处理程序使用可替换的&nbsp;xcopy&nbsp;源和目标参数：<br><br>@echo&nbsp;off<br>rem&nbsp;COPYIT.BAT&nbsp;transfers&nbsp;all&nbsp;files&nbsp;in&nbsp;all&nbsp;subdirectories&nbsp;of<br>rem&nbsp;the&nbsp;source&nbsp;drive&nbsp;&nbsp;or&nbsp;directory&nbsp;(%1)&nbsp;to&nbsp;the&nbsp;destination<br><br>rem&nbsp;drive&nbsp;&nbsp;or&nbsp;directory&nbsp;(%2)<br><br>xcopy&nbsp;%1&nbsp;%2&nbsp;/s&nbsp;/e<br><br>if&nbsp;errorlevel&nbsp;4&nbsp;goto&nbsp;lowmemory<br>if&nbsp;errorlevel&nbsp;2&nbsp;goto&nbsp;abort<br>if&nbsp;errorlevel&nbsp;0&nbsp;goto&nbsp;exit<br><br>:lowmemory<br>echo&nbsp;Insufficient&nbsp;memory&nbsp;to&nbsp;copy&nbsp;files&nbsp;&nbsp;or<br>echo&nbsp;invalid&nbsp;drive&nbsp;&nbsp;or&nbsp;command-line&nbsp;syntax.<br>goto&nbsp;exit<br><br>:abort<br>echo&nbsp;You&nbsp;pressed&nbsp;CTRL+C&nbsp;to&nbsp;end&nbsp;the&nbsp;copy&nbsp;operation.<br>goto&nbsp;exit<br><br>:exit<br><br>要使用该批处理程序将&nbsp;C:\Prgmcode&nbsp;目录和其子目录中的所有文件复制到驱动器&nbsp;B&nbsp;中，请键入：<br><br>copyit&nbsp;c:\prgmcode&nbsp;b:<br><br>该命令解释程序将用&nbsp;C:\Prgmcode&nbsp;替换&nbsp;%1&nbsp;与&nbsp;B:。对于&nbsp;%2，然后使用&nbsp;xcopy&nbsp;与&nbsp;/e&nbsp;和&nbsp;/s&nbsp;命令行选项。如果&nbsp;xcopy&nbsp;遇到错误，批处理程序将读取退出码并转到相应&nbsp;IF&nbsp;ERRORLEVEL&nbsp;语句中指示的标签，然后显示相应的消息并退出批处理程序。<br><br>可以在批处理文件内的任何地方使用批处理参数，以提取有关环境设置的信息。<br><br>Cmd.exe&nbsp;提供批处理参数扩展变量（%0&nbsp;到&nbsp;%9）。在批处理文件中使用批处理参数时，%0&nbsp;将由批处理文件名替换，而&nbsp;%1&nbsp;到&nbsp;%9&nbsp;将由在命令行键入的相应参数替换。要访问超出&nbsp;%9&nbsp;的参数，必须使用&nbsp;shift&nbsp;命令。有关&nbsp;shift&nbsp;命令的详细信息，请参阅&nbsp;Shift。%*&nbsp;批处理参数是传递到批处理文件中的所有参数（不包括&nbsp;%0）的通配符引用。<br><br>例如，要将&nbsp;Folder1&nbsp;中的内容复制到&nbsp;Folder2，其中&nbsp;%1&nbsp;和&nbsp;%2&nbsp;将分别由值&nbsp;Folder1&nbsp;和&nbsp;Folder2&nbsp;替换，请在批处理文件&nbsp;Mybatch.bat&nbsp;中键入如下内容：<br><br>xcopy&nbsp;%1\*.*&nbsp;%2<br><br>要运行该文件，请键入：<br><br>mybatch.bat&nbsp;C:\folder1&nbsp;D:\folder2<br><br>这与在批处理文件中键入如下内容是等效的：<br><br>xcopy&nbsp;C:\folder1&nbsp;\*.*&nbsp;D:\folder2<br><br>也可以在批处理参数中使用修改符。修改符使用当前的驱动器和目录信息将批处理参数作为部分或完整的文件或目录名进行扩展。要使用修改符，请键入百分号&nbsp;(%)&nbsp;字符，后面是波形符号&nbsp;(~)&nbsp;字符，然后键入合适的修改符（即&nbsp;%~modifier）。<br><br>下表列出了可在扩展中使用的修改符。<br><br><br>修饰符&nbsp;描述&nbsp;<br>%~1<br>扩展&nbsp;%1&nbsp;并删除任何外围引号&nbsp;(&quot;&quot;)。<br><br>%~f1<br>将&nbsp;%1&nbsp;扩展到完全限定的路径名。<br><br>%~d1<br>将&nbsp;%1&nbsp;扩展到驱动器盘符。<br><br>%~p1<br>将&nbsp;%1&nbsp;扩展到路径。<br><br>%~n1<br>将&nbsp;%1&nbsp;扩展到文件名。<br><br>%~x1<br>将&nbsp;%1&nbsp;扩展到文件扩展名。<br><br>%~s1<br>扩展的路径仅包含短名称。<br><br>%~a1<br>将&nbsp;%1&nbsp;扩展到文件属性。<br><br>%~t1<br>将&nbsp;%1&nbsp;扩展到文件日期和时间。<br><br>%~z1<br>将&nbsp;%1&nbsp;扩展到文件大小。<br><br>%~$PATH:1<br>搜索&nbsp;PATH&nbsp;环境变量中列出的目录，并将&nbsp;%1&nbsp;扩展到第一个找到的目录的完全限定名称。如果没有定义环境变量名称，或没有找到文件，则此修改符扩展成空字符串。<br><br><br>下表列出了可用于获取综合结果的修改符和限定符的可能组合情况：<br><br><br>修饰符&nbsp;描述&nbsp;<br>%~dp1<br>将&nbsp;%1&nbsp;扩展到驱动器盘符和路径。<br><br>%~nx1<br>将&nbsp;%1&nbsp;扩展到文件名和扩展名。<br><br>%~dp$PATH:1<br>在&nbsp;PATH&nbsp;环境变量列出的目录中搜索&nbsp;%1，并扩展到第一个找到的目录的驱动器盘符和路径。<br><br>%~ftza1<br>将&nbsp;%1&nbsp;扩展到类似&nbsp;dir&nbsp;的输出行。<br><br><br>注意<br><br>•&nbsp;在上面的例子中，可以使用其他批处理参数值替换&nbsp;%1&nbsp;和&nbsp;PATH。<br><br><br>%*&nbsp;修改符是唯一可代表在批处理文件中传递的所有参数的修改符。不能将该修改符与&nbsp;%~&nbsp;修改符组合使用。%~&nbsp;语法必须通过有效的参数值来终止。<br><br>不能以与使用环境变量相同的方式使用批处理参数。不能搜索和替换值，或检查子字符串。但是，可以将参数分配给环境变量，然后对该环境变量进行操作。<br>&nbsp;<br>]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=267</link><dc:subject>精彩网摘</dc:subject><dc:creator>flashman</dc:creator><dc:date>2010-01-29 04:30 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=266"><title>up&#100;ate语句</title><description><![CDATA[update语句<br><br>为了方便起见,建立了以下简单模型,和构造了部分测试数据:<br>在某个业务受理子系统BSS中，<br>--客户资料表]]></description><content:encoded><![CDATA[update语句<br><br>为了方便起见,建立了以下简单模型,和构造了部分测试数据:<br>在某个业务受理子系统BSS中，<br>--客户资料表<br>create&nbsp;table&nbsp;customers<br>(<br>&nbsp;&nbsp;&nbsp;customer_id&nbsp;&nbsp;&nbsp;number(8)&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;null,&nbsp;--&nbsp;客户标示<br>&nbsp;&nbsp;&nbsp;city_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(10)&nbsp;not&nbsp;null,&nbsp;--&nbsp;所在城市<br>&nbsp;&nbsp;&nbsp;customer_type&nbsp;char(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;null,&nbsp;--&nbsp;客户类型<br><br>&nbsp;&nbsp;&nbsp;...<br>)<br>create&nbsp;unique&nbsp;index&nbsp;PK_customers&nbsp;on&nbsp;customers&nbsp;(customer_id)<br>由于某些原因，客户所在城市这个信息并不什么准确，但是在<br>客户服务部的CRM子系统中，通过主动服务获取了部分客户20%的所在<br>城市等准确信息，于是你将该部分信息提取至一张临时表中：<br>create&nbsp;table&nbsp;tmp_cust_city<br>(<br>&nbsp;&nbsp;&nbsp;customer_id&nbsp;&nbsp;&nbsp;&nbsp;number(8)&nbsp;not&nbsp;null,<br>&nbsp;&nbsp;&nbsp;citye_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(10)&nbsp;not&nbsp;null，<br>&nbsp;&nbsp;&nbsp;customer_type&nbsp;char(2)&nbsp;&nbsp;&nbsp;not&nbsp;null<br>)<br>1)&nbsp;最简单的形式<br>&nbsp;&nbsp;&nbsp;--经确认customers表中所有customer_id小于1000均为&#39;北京&#39;<br>&nbsp;&nbsp;&nbsp;--1000以内的均是公司走向全国之前的本城市的老客户:)<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=&#39;北京&#39;<br>&nbsp;&nbsp;&nbsp;where&nbsp;customer_id&lt;1000&nbsp;2)&nbsp;两表(多表)关联update&nbsp;--&nbsp;仅在where字句中的连接<br>&nbsp;&nbsp;&nbsp;--这次提取的数据都是VIP，且包括新增的,所以顺便更新客户类别<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;customer_type=&#39;01&#39;&nbsp;--01&nbsp;为vip，00为普通<br>&nbsp;&nbsp;&nbsp;where&nbsp;exists&nbsp;(select&nbsp;1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;3)&nbsp;两表(多表)关联update&nbsp;--&nbsp;被修改值由另一个表运算而来<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=(select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id)<br>&nbsp;&nbsp;&nbsp;where&nbsp;exists&nbsp;(select&nbsp;1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;--&nbsp;update&nbsp;超过2个值<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;(city_name,customer_type)=(select&nbsp;b.city_name,b.customer_type&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id)<br><br>&nbsp;&nbsp;&nbsp;where&nbsp;exists&nbsp;(select&nbsp;1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;注重在这个语句中，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=(select&nbsp;b.city_name,b.customer_type&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;与<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select&nbsp;1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;是两个独立的子查询，查看执行计划可知，对b表/索引扫描了2篇；<br>&nbsp;&nbsp;&nbsp;假如舍弃where条件，则默认对A表进行全表<br>&nbsp;&nbsp;&nbsp;更新，但由于(select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;where&nbsp;b.customer_id=a.customer_id)<br>&nbsp;&nbsp;&nbsp;有可能不能提供&quot;足够多&quot;值，因为tmp_cust_city只是一部分客户的信息，<br>&nbsp;&nbsp;&nbsp;所以报错（假如指定的列--city_name可以为NULL则另当别论）：<br>&nbsp;&nbsp;&nbsp;<br>01407,&nbsp;00000,&nbsp;&quot;cannot&nbsp;update&nbsp;(%s)&nbsp;to&nbsp;NULL&quot;<br>//&nbsp;*Cause:<br>//&nbsp;*Action:&nbsp;&nbsp;&nbsp;&nbsp;一个替代的方法可以采用：<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=nvl((select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id),a.city_name)<br>&nbsp;&nbsp;&nbsp;或者<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=nvl((select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id),&#39;未知&#39;)<br>&nbsp;&nbsp;&nbsp;--&nbsp;当然这不符合业务逻辑了&nbsp;4)&nbsp;上述3)在一些情况下，因为B表的纪录只有A表的20-30%的纪录数，<br>&nbsp;&nbsp;&nbsp;考虑A表使用INDEX的情况，使用cursor也许会比关联update带来更好的性能：<br>&nbsp;&nbsp;&nbsp;<br>set&nbsp;serveroutput&nbsp;on&nbsp;declare<br>&nbsp;&nbsp;&nbsp;&nbsp;cursor&nbsp;city_cur&nbsp;is<br>&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;customer_id,city_name<br><br>&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;by&nbsp;customer_id;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;my_cur&nbsp;in&nbsp;city_cur&nbsp;loop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;customers<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=my_cur.city_name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;customer_id=my_cur.customer_id;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;此处也可以单条/分批次提交，避免锁表情况&nbsp;**/<br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;mod(city_cur%rowcount,10000)=0&nbsp;then<br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(&#39;----&#39;);<br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commit;<br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;loop;<br>end;&nbsp;5)&nbsp;关联update的一个特例以及性能再探讨<br>&nbsp;&nbsp;&nbsp;在Oracle的update语句语法中，除了可以update表之外，也可以是视图，所以有以下1个特例：<br>&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;(select&nbsp;a.city_name,b.city_name&nbsp;as&nbsp;new_name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;customers&nbsp;a,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=new_name<br>&nbsp;&nbsp;&nbsp;&nbsp;这样能避免对B表或其索引的2次扫描，但前提是&nbsp;A(customer_id)&nbsp;b(customer_id)必需是unique&nbsp;index<br>&nbsp;&nbsp;&nbsp;&nbsp;或primary&nbsp;key。否则报错：<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>01779,&nbsp;00000,&nbsp;&quot;cannot&nbsp;modify&nbsp;a&nbsp;column&nbsp;which&nbsp;maps&nbsp;to&nbsp;a&nbsp;non&nbsp;key-preserved&nbsp;table&quot;<br>//&nbsp;*Cause:&nbsp;An&nbsp;attempt&nbsp;was&nbsp;made&nbsp;to&nbsp;insert&nbsp;&nbsp;or&nbsp;update&nbsp;columns&nbsp;of&nbsp;a&nbsp;join&nbsp;view&nbsp;which<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map&nbsp;to&nbsp;a&nbsp;non-key-preserved&nbsp;table.<br>//&nbsp;*Action:&nbsp;Modify&nbsp;the&nbsp;underlying&nbsp;base&nbsp;tables&nbsp;directly.&nbsp;6）oracle另一个常见错误<br>&nbsp;&nbsp;&nbsp;回到3)情况,由于某些原因，tmp_cust_city&nbsp;customer_id&nbsp;不是唯一index/primary&nbsp;key<br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=(select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id)<br>&nbsp;&nbsp;&nbsp;where&nbsp;exists&nbsp;(select&nbsp;1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;tmp_cust_city&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;当对于一个给定的a.customer_id<br>&nbsp;&nbsp;&nbsp;(select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id)<br>&nbsp;&nbsp;&nbsp;返回多余1条的情况，则会报如下错误：<br>&nbsp;&nbsp;&nbsp;<br>01427,&nbsp;00000,&nbsp;&quot;single-row&nbsp;subquery&nbsp;returns&nbsp;more&nbsp;than&nbsp;one&nbsp;row&quot;<br>//&nbsp;*Cause:<br>//&nbsp;*Action:&nbsp;&nbsp;&nbsp;&nbsp;一个比较简单近似于不负责任的做法是<br><br>&nbsp;&nbsp;&nbsp;update&nbsp;customers&nbsp;a&nbsp;&nbsp;&nbsp;--&nbsp;使用别名<br>&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;city_name=(select&nbsp;b.city_name&nbsp;from&nbsp;tmp_cust_city&nbsp;b&nbsp;where&nbsp;b.customer_id=a.customer_id)&nbsp;&nbsp;&nbsp;&nbsp;如何理解&nbsp;01427&nbsp;错误，在一个很复杂的多表连接update的语句，经常因考虑不周，出现这个错误，<br>&nbsp;&nbsp;&nbsp;仍已上述例子来描述，一个比较简便的方法就是将A表代入&nbsp;值表达式&nbsp;中,使用group&nbsp;by&nbsp;和<br>&nbsp;&nbsp;&nbsp;having&nbsp;字句查看重复的纪录<br>&nbsp;&nbsp;&nbsp;(select&nbsp;b.customer_id,b.city_name,count(*)<br>&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;tmp_cust_city&nbsp;b,customers&nbsp;a&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;b.customer_id=a.customer_id<br>&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;b.customer_id,b.city_name<br>&nbsp;&nbsp;&nbsp;&nbsp;having&nbsp;count(*)&gt;=2<br>&nbsp;&nbsp;&nbsp;)<br><br>&nbsp;--------------------------------------------<br>&nbsp;&nbsp;DECLARE&nbsp;&nbsp;&nbsp;MyCursor&nbsp;&nbsp;&nbsp;CURSOR&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;LOCAL&nbsp;&nbsp;&nbsp;SCROLL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;FOR&nbsp;&nbsp;&nbsp;SELECT&nbsp;aa,bb&nbsp;FROM&nbsp;&nbsp;&nbsp;test&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;OPEN&nbsp;&nbsp;&nbsp;MyCursor&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;DECLARE&nbsp;&nbsp;&nbsp;@list&nbsp;numeric(4),@item&nbsp;&nbsp;varchar(10),@value&nbsp;varchar(10)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;select&nbsp;@list=0<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;FETCH&nbsp;&nbsp;&nbsp;NEXT&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;MyCursor&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;INTO&nbsp;&nbsp;&nbsp;@item,@value&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;WHILE&nbsp;&nbsp;&nbsp;(@@FETCH_STATUS&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;BEGIN&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;select&nbsp;@list=@list+1&nbsp;<br>&nbsp;&nbsp;UPDATE&nbsp;TEST&nbsp;SET&nbsp;DD=&nbsp;@list&nbsp;WHERE&nbsp;CURRENT&nbsp;OF&nbsp;MyCursor<br><br>&nbsp;&nbsp;--print&nbsp;@list<br>&nbsp;&nbsp;end<br><br>&nbsp;&nbsp;FETCH&nbsp;&nbsp;&nbsp;NEXT&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;MyCursor&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;INTO&nbsp;&nbsp;&nbsp;@item,@value&nbsp;&nbsp;<br>&nbsp;<br>&nbsp;&nbsp;END&nbsp;&nbsp;<br><br><br>---------------------------<br>游标法（再不行我也没辙）：&nbsp;<br>DECLARE&nbsp;@a&nbsp;varchar(10)&nbsp;--这里的类型要换成跟你的a字段的类型一样的&nbsp;<br>DECLARE&nbsp;@b&nbsp;varchar(10)&nbsp;--这里的类型要换成跟你的b字段的类型一样的&nbsp;<br>DECLARE&nbsp;bCursor&nbsp;CURSOR&nbsp;FOR&nbsp;<br>SELECT&nbsp;a,b&nbsp;FROM&nbsp;test1&nbsp;<br>OPEN&nbsp;bCursor&nbsp;<br>FETCH&nbsp;NEXT&nbsp;FROM&nbsp;bCursor&nbsp;INTO&nbsp;@a,@b&nbsp;<br>WHILE&nbsp;@@fetch_status&nbsp;=&nbsp;0&nbsp;<br>BEGIN&nbsp;<br>UPDATE&nbsp;test2&nbsp;SET&nbsp;b=@b&nbsp;where&nbsp;a=@a&nbsp;<br>FETCH&nbsp;NEXT&nbsp;FROM&nbsp;bCursor&nbsp;INTO&nbsp;@a,@b&nbsp;<br>END&nbsp;<br>CLOSE&nbsp;bCursor&nbsp;<br>DEALLOCATE&nbsp;bCursor&nbsp;<br>]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=266</link><dc:subject>精彩网摘</dc:subject><dc:creator>flashman</dc:creator><dc:date>2009-12-15 10:37 AM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=265"><title>电表窃电器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=265</link><dc:subject>精彩网摘</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:28 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=264"><title>通电表节电器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=264</link><dc:subject>精彩网摘</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:24 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=263"><title>液晶预付费电表节电器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=263</link><dc:subject>精彩网摘</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:23 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=262"><title>插卡式电表控制器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=262</link><dc:subject>灌水专区</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:16 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=261"><title>ic卡电表控制器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=261</link><dc:subject>精彩网摘</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:10 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=260"><title>电子电表调校器</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=260</link><dc:subject>灌水专区</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:07 PM</dc:date></item><item rdf:about="http://www.flashman.cn/blogview.asp?logID=259"><title>隐形透视眼镜</title><description><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></description><content:encoded><![CDATA[这是篇隐藏日志，请到 我的爱链 的首页查看！]]></content:encoded><link>http://www.flashman.cn/blogview.asp?logID=259</link><dc:subject>灌水专区</dc:subject><dc:creator>meinvkan</dc:creator><dc:date>2009-12-08 03:05 PM</dc:date></item>
</rdf:Seq>
</items>
</channel>
</rdf:RDF>