﻿<?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>BlogJava-★Daniel's Blog★-文章分类-SQL Server</title><link>http://www.blogjava.net/Daniel2005/category/4957.html</link><description>URL:http://www.blogjava.net/Daniel2005</description><language>zh-cn</language><lastBuildDate>Fri, 27 Jul 2007 13:54:57 GMT</lastBuildDate><pubDate>Fri, 27 Jul 2007 13:54:57 GMT</pubDate><ttl>60</ttl><item><title>查找数据库中存储过程中是否包含有delete语句!</title><link>http://www.blogjava.net/Daniel2005/articles/132715.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Fri, 27 Jul 2007 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/132715.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/132715.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/132715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/132715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/132715.html</trackback:ping><description><![CDATA[<p>select * from syscomments<br>where text like '%delete%'</p>
<p>select * from sysobjects<br>where id='261575970'</p>
<img src ="http://www.blogjava.net/Daniel2005/aggbug/132715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2007-07-27 11:01 <a href="http://www.blogjava.net/Daniel2005/articles/132715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSSQLServer查询分页 </title><link>http://www.blogjava.net/Daniel2005/articles/120798.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Wed, 30 May 2007 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/120798.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/120798.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/120798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/120798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/120798.html</trackback:ping><description><![CDATA[<p>select top 10 * from yc_module where (block_id not in (select top 0 block_id from yc_module order by block_id)) order by block_id;<br></p>
<p>&nbsp;</p>
<p>分页方案一：(利用Not In和SELECT TOP分页)<br>语句形式：<br>SELECT TOP 10 *<br>FROM TestTable<br>WHERE (ID NOT IN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT TOP 20 id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TestTable<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY id))<br>ORDER BY ID</p>
<p><br>SELECT TOP 页大小 *<br>FROM TestTable<br>WHERE (ID NOT IN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT TOP 页大小*页数 id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM 表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY id))<br>ORDER BY ID</p>
<p>-------------------------------------</p>
<p>分页方案二：(利用ID大于多少和SELECT TOP分页）<br>语句形式：<br>SELECT TOP 10 *<br>FROM TestTable<br>WHERE (ID &gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT MAX(id)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM (SELECT TOP 20 id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TestTable<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY id) AS T))<br>ORDER BY ID</p>
<p><br>SELECT TOP 页大小 *<br>FROM TestTable<br>WHERE (ID &gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT MAX(id)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM (SELECT TOP 页大小*页数 id<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM 表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY id) AS T))<br>ORDER BY ID</p>
<p><br>-------------------------------------</p>
<p>分页方案三：(利用SQL的游标存储过程分页)<br>create&nbsp; procedure XiaoZhengGe<br>@sqlstr nvarchar(4000), --查询字符串<br>@currentpage int,&nbsp;--第N页<br>@pagesize int&nbsp;--每页行数<br>as<br>set nocount on<br>declare @P1 int,&nbsp;--P1是游标的id<br>&nbsp;@rowcount int<br>exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output<br>select ceiling(<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#49;&#46;&#48;&#42;&#64;&#114;&#111;&#119;&#99;&#111;&#117;&#110;&#116;&#47;&#64;&#112;&#97;&#103;&#101;&#115;&#105;&#122;&#101;"><u><font color=#0000ff>1.0*@rowcount/@pagesize</font></u></a>) as 总页数--,@rowcount as 总行数,@currentpage as 当前页&nbsp;<br>set @currentpage=(@currentpage-1)*@pagesize+1<br>exec sp_cursorfetch @P1,16,@currentpage,@pagesize <br>exec sp_cursorclose @P1<br>set nocount off</p>
<p>其它的方案：如果没有主键，可以用临时表，也可以用方案三做，但是效率会低。<br>建议优化的时候，加上主键和索引，查询效率会提高。</p>
<p>通过SQL 查询分析器，显示比较：我的结论是:<br>分页方案二：(利用ID大于多少和SELECT TOP分页）效率最高，需要拼接SQL语句<br>分页方案一：(利用Not In和SELECT TOP分页)&nbsp;&nbsp; 效率次之，需要拼接SQL语句<br>分页方案三：(利用SQL的游标存储过程分页)&nbsp;&nbsp;&nbsp; 效率最差，但是最为通用</p>
<p>在实际情况中，要具体分析。</p>
<img src ="http://www.blogjava.net/Daniel2005/aggbug/120798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2007-05-30 09:19 <a href="http://www.blogjava.net/Daniel2005/articles/120798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string or binary data would be truncated. The statement has been terminated. </title><link>http://www.blogjava.net/Daniel2005/articles/104008.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Thu, 15 Mar 2007 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/104008.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/104008.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/104008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/104008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/104008.html</trackback:ping><description><![CDATA[添加SET ANSI_WARNINGS OFF这样它发生错误的那个field不是会truncate.<br />然后SET ANSI_WARNINGS ON.<img src ="http://www.blogjava.net/Daniel2005/aggbug/104008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2007-03-15 14:23 <a href="http://www.blogjava.net/Daniel2005/articles/104008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2000中的数据转换服务 (DTS) http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx</title><link>http://www.blogjava.net/Daniel2005/articles/83264.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Fri, 24 Nov 2006 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/83264.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/83264.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/83264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/83264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/83264.html</trackback:ping><description><![CDATA[
		<h1>SQL Server 2000中的数据转换服务 (DTS)</h1>
		<div class="date">更新日期： 2004年06月15日</div>
		<div class="byline">发布者 Diane Larsen</div>
		<div class="overview">
				<p>Euan Garden, 投稿人</p>
				<p>Microsoft Corporation</p>
				<p>2000 年 9 月</p>
				<p>
						<b>摘要： </b>为了完成数据合并、存档和分析等任务；为了进行应用程序开发；为了进行数据库或服务器升级，数据库管理员经常需要导入、导出以及转换数据。SQL Server 2000 中的数据转换服务（DTS）为此提供了一组图形化工具和可编程对象，能够帮助管理员和开发人员解决从不同来源到单个或多个目标的数据转移问题，包括数据提取、转换以及合并。您可以将任务、工作流操作和限制条件组成 DTS<i>数据包</i>，然后安排定期或在特定事件发生时执行该数据包。本白皮书将介绍 DTS，给出一些能够用于创建 DTS 解决方案的组件和服务，介绍如何使用 DTS Designer 来实施 DTS 解决方案，最后将介绍 DTS 应用程序开发。</p>
		</div>
		<center>
				<img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" />
		</center>
		<div style="HEIGHT: 18px">
		</div>
		<h5 style="PADDING-TOP: 2px">本页内容</h5>
		<table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ETB">
												<img height="9" alt="DTS 简介" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ETB">DTS 简介</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ESD">
												<img height="9" alt="使用 DTS Designer" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ESD">使用 DTS Designer</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ECAAE">
												<img height="9" alt="保存 DTS 数据包的选项" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ECAAE">保存 DTS 数据包的选项</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ETAAE">
												<img height="9" alt="将 DTS 作为应用程序开发平台" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#ETAAE">将 DTS 作为应用程序开发平台</a>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="ETB">
		</a>
		<h2>DTS 简介</h2>
		<p>大部分公司的数据都具有多种存储格式和存储位置。为了支持决策制定、提高系统性能或升级现有系统，经常必须将数据从一个数据存储位置转移到另一个位置。</p>
		<p>Microsoft SQL Server 2000 数据转换服务（DTS）为此提供了一系列的工具，您可以用来从不同来源将数据提取、转换和合并到单个或多个目标。通过使用DTS工具，您可以根据公司的特殊需求创建定制的数据移动解决方案，正如下面这些情形：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您已经在早期版本的 SQL Server 或其他平台（例如 Microsoft Access）上部署了一个数据库应用程序。现在，新版本的应用程序需要 SQL Server 2000，而且需要更改数据库架构，并转换部分数据类型。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>为了复制和转换数据，可以构建一个 DTS 解决方案，将数据库对象从原始数据源复制到 SQL Server 2000 数据库中，同时重新设置数据栏并更改数据类型。您可以使用 DTS 工具来运行这个解决方案，或者将这个解决方案嵌入到您的应用程序中。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您必须将一些关键的 Microsoft Excel 电子表格合并到 SQL Server 数据库中。很多部门在每月底创建电子表格，但是没有设置日程安排来完成所有的电子表格。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>为了合并电子表格数据，您可以构建一个 DTS 解决方案，使其在消息被发送到消息队列时执行。这个消息将触发 DTS，使其从电子表格中提取数据，执行各种定义的转换，然后将数据装载到 SQL Server 数据库中。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您的数据仓库中保存了有关业务操作的历史数据，您要使用 Microsoft SQL Server 2000 分析服务来汇总这些数据。这个数据仓库需要每天夜间从联机事务处理（OLTP）数据库进行更新。而您的 OLTP 系统一天 24 小时都在使用中，其性能十分关键。</p>
										<p>您可以构建一个 DTS 解决方案，使用文件传输协议（FTP）将数据文件移动到本地驱动器中，将数据装载到事实表中，然后使用分析服务对数据进行统计。您可以安排这个 DTS 解决方案每天夜间执行，也可以使用新的 DTS 日志选项来跟踪这个过程所用的时间，使您能够分析性能随时间的变化。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<h3>DTS 是什么?</h3>
		<p>DTS 是一组数据转换工具，您可以用来在一个或多个数据源（例如 Microsoft SQL Server、 Microsoft Excel 或 Microsoft Access）之间进行不同类型数据的导入、导出和转换。其中的连通性通过数据访问的开放式标准－OLE DB－来提供。ODBC（开放式数据库连接）数据源由 OLE DB Provider for ODBC 来支持。</p>
		<p>您可以将 DTS 解决方案创建为一个或多个<i>数据包</i>。每个数据包中可以包含一组有序的任务，定义所要执行的工作，也可以包含数据和对象的转换、定义任务执行的工作流限制以及数据源和目标的连接等。DTS 数据包也提供记录数据包执行细节、控制事务以及处理全局变量等服务。</p>
		<p>下列工具可以用于创建和执行 DTS 数据包：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>导入/导出向导（Import/Export Wizard）用于构建相对简单的 DTS 数据包，支持数据迁移和简单转换。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>DTS Designer 图形化地实施 DTS 对象模型，允许您创建具有大量功能的 DTS 数据包。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>
												<b>DTSRun</b>是一个命令提示符实用程序，用来执行已有的 DTS 数据包。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>DTSRunUI 是<b>DTSRun</b>的图形化界面, 也允许传递全局变量和生成命令行。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>SQLAgent 不是一个 DTS 应用程序；但是 DTS 可以用它来安排数据包的执行。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>您也可以使用 DTS 对象模型通过编程创建和运行数据包，构建定制任务以及构建定制转换。</p>
		<h3>DTS 中的新内容?</h3>
		<p>Microsoft SQL Server 2000 引入了许多 DTS 增强和新特性：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>新的 DTS 任务包括 FTP 任务、执行数据包任务、动态属性任务以及消息队列任务。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>增强的日志功能记录了每个数据包执行的信息，允许您拥有完整的执行历史，并能查看任务中每个步骤的信息。您可以生成异常文件，包含可能由于错误而没有执行的数据行。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您可以将 DTS 数据包保存为 Microsoft Visual Basic 文件。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>新的多段数据泵允许高级用户在不同阶段定制数据转换操作。同时，也可以使用全局变量作为查询的输入参数。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您可以在 DTS 转换任务和执行 SQL 任务中使用参数化的源查询。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>您可以使用执行数据包任务，动态地将全局变量的取值从父数据包分配到子数据包。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">返回页首</a>
		</div>
		<a name="ESD">
		</a>
		<h2>使用 DTS Designer</h2>
		<p>DTS Designer 图形化地实施 DTS 对象模型，允许您图形化地创建 DTS 数据包。您可以使用 DTS Designer 来：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>创建包含一个或多个步骤的简单数据包。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>创建包含复杂工作流的数据包，这些工作流中可包含使用有条件逻辑的多步操作、事件驱动的代码或多个数据源的连接。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>编辑已有的数据包。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>DTS Designer 界面由工作区域、工具栏和菜单组成。其中工作区域用于构建数据包，工具栏包含有数据包元素，您可以将它们拖动到设计页中，菜单中包含有工作流和数据包管理命令。</p>
		<div style="WIDTH: 335px">
				<img height="219" alt="图1：DTS Designer界面" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql01.gif" width="335" border="0" />
				<br />
				<p class="figureCaption">
						<b>图1：DTS Designer 界面</b>
						<br />
						<a href="http://www.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql01_BIG.gif" target="_blank">查看大图。</a>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>在 DTS Designer 中，您可以将连接和任务拖动到设计页中，并指定工作流执行的顺序，从而轻松地创建功能强大的 DTS 数据包。下面的内容将定义任务、工作流、连接和转换，并介绍如何使用 DTS Designer 轻松地实施 DTS 解决方案。</p>
		<h3>任务：定义数据包中的步骤</h3>
		<p>DTS 数据包中通常包含一个或多个步骤。每个任务定义了一个可能在数据包执行过程中执行的工作项目。您可以使用任务来：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>转换数据</p>
										<table class="dataTable" id="ERE" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql02" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql02.gif" width="21" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">转换数据任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将数据从来源移动到目标，可以选择在数据上应用数据栏转换。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql03" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql03.gif" width="16" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">数据驱动的查询任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来对数据执行基于 Transact-SQL 的灵活操作，包括存储过程以及 INSERT、UPDATE 或 DELETE 声明。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">?</p>
																</td>
																<td>
																		<p class="lastInCell">平行数据泵任务 (1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">仅可用于编程，平行数据泵任务执行与转换数据和数据驱动的查询任务相同的功能，但是支持 OLE DB 2.5 及更新版本所定义的 “章节式” 数据行集。</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>复制和管理数据</p>
										<table class="dataTable" id="E2F" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql04" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql04.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">批量插入任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于快速地将批量数据装载到 SQL Server 表或视图中。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="23" alt="dtssql05" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql05.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Execute SQL 任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于在数据包执行过程中运行 SQL 语句。Execute SQL 任务也可以保存查询的结果数据。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="20" alt="dtssql06" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql06.gif" width="18" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Copy SQL Server Objects 任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将 SQL Server 对象从一个 SQL Server 安装或实例中复制到另一个中。您可以复制数据和表等对象，也可以复制视图和存储过程等对象定义。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql07" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql07.gif" width="18" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Transfer Database 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将 SQL Server 数据库从一个 SQL Server 7.0 或 SQL Server 2000 实例移动或复制到 SQL Server 2000 实例中。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql08" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql08.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Transfer Error Messages 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于将用户指定的错误消息从 SQL Server 7.0 或 SQL Server 2000 实例复制到 SQL Server 2000 实例，这些错误消息是由<b>sp_addmessage</b>系统存储过程所生成的。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql09" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql09.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Transfer Logins 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将帐号从 SQL Server 7.0 或 SQL Server 2000 实例复制到 SQL Server 2000 实例。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="17" alt="dtssql10" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql10.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Transfer Jobs 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将作业从 SQL Server 7.0 或 SQL Server 2000 实例复制到 SQL Server 2000 实例。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql11" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql11.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Transfer Master Stored Procedures 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来将存储过程从 SQL Server 7.0 或 SQL Server 2000 实例中的<b>master</b>数据库复制到 SQL Server 2000 实例的 <b>master</b>数据库。</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>从数据包中将任务作为作业运行</p>
										<table class="dataTable" id="EGBAC" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="17" alt="dtssql12" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql12.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">ActiveX Script 任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来编写代码，执行其他 DTS 任务中没有的功能。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql13" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql13.gif" width="18" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Dynamic Properties 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于在数据包运行时从 DTS 数据包外的来源处获得数值，并将这些值分配给选定的数据包属性。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql14" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql14.gif" width="21" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Execute Package 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于从数据包中运行其他 DTS 数据包。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="20" alt="dtssql15" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql15.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Execute Process 任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于运行可执行程序或批处理文件。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql16" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql16.gif" width="21" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">FTP 任务 (1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来从远程服务器或 Internet 位置下载数据文件。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql17" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql17.gif" width="18" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Message Queue 任务(1)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来从 Microsoft 消息队列发送和接受消息。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="17" alt="dtssql18" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql18.gif" width="20" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Send Mail 任务</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用来发送电子邮件。</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql19" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql19.gif" width="18" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Analysis Services Processing 任务 (2)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于处理一个或多个 SQL Server 2000 分析服务中所定义的对象。</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="20" alt="dtssql20" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql20.gif" width="19" border="0" />
																		</p>
																</td>
																<td>
																		<p class="lastInCell">Data Mining 任务 (1,2)</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">用于从 SQL Server 2000 分析服务所定义的数据挖掘模型对象中创建一个预测查询和输出表。</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<p>1 SQL Server 2000中新增。</p>
		<p>2 仅适用于已安装 SQL Server 2000 分析服务的情形。</p>
		<p>您可以程序化地创建定制任务，然后使用 Register Custom Task（注册定制任务）命令将它们集成到 DTS Designer 中。</p>
		<p>为了说明这些任务的使用，在这里我们给出了一个包含两个任务的简单 DTS 数据包： Microsoft ActiveX Script 任务和 Send Mail 任务：</p>
		<div style="WIDTH: 242px">
				<img height="54" alt="图2：具有两个任务的DTS数据包" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql21.gif" width="242" border="0" />
				<br />
				<p class="figureCaption">
						<b>图2：具有两个任务的 DTS 数据包</b>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>ActiveX Script 任务可以驻留任何 ActiveX 脚本引擎，包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript 或者 ActiveState ActivePerl（您可以从<a href="http://www.activestate.com/">http://www.activestate.com [英文]</a>下载）。 Send Mail 任务可以发送消息，指出该数据包已经运行。请注意，这些任务是没有顺序的。在执行数据包时，ActiveX Script 任务和 Send Mail 任务同时运行。</p>
		<h3>工作流：设置任务优先级</h3>
		<p>当您在定义一组任务时，通常任务的执行是应该有一定顺序的。如果这些任务拥有一定的顺序，那么每个任务将称为一个过程中的一个步骤。在 DTS Designer 中，您可以在 DTS Designer 设计页中对任务进行操作，使用优先级限制来控制任务执行的顺序。</p>
		<p>优先级限制将数据包中的任务依次链接起来。下表给出了您可以在 DTS 中使用的优先级限制的类型。</p>
		<table class="dataTable" id="EBFAC" cellspacing="0" cellpadding="0" width="90%">
				<thead>
						<tr class="stdHeader" valign="top">
								<td id="colEEFAC" width="27%">优先级限制</td>
								<td id="colEIFAC" style="BORDER-RIGHT: #cccccc 1px solid" width="73%">说明</td>
						</tr>
				</thead>
				<tbody>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">
												<img height="13" alt="dtssql22" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql22.gif" width="97" border="0" />
												<br />
												<b>On Completion（完成后）</b>
												<br />(蓝色箭头)</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">如果您希望任务 2 处于等待状态，直至任务 1 完成（无论结果如何），那么就使用 On Completion 优先级限制将任务 1 链接到任务 2。</p>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">
												<img height="14" alt="dtssql23" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql23.gif" width="97" border="0" />
												<br />
												<b>On Success（成功后）</b>
												<br />(绿色箭头)</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">如果您希望任务 2 处于等待状态，直至任务 1 成功完成，那么就使用 On Success 优先级限制将任务 1 链接到任务 2。</p>
								</td>
						</tr>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">
												<img height="12" alt="dtssql24" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql24.gif" width="96" border="0" />
												<br />
												<b>On Failure（失败后）</b>
												<br />(红色箭头)</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">如果您希望任务 2 仅在任务 1 无法成功执行时才开始执行，那么就使用 On Failure 优先级限制将任务 1 链接到任务 2。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<div class="dataTableBottomMargin">
		</div>
		<p>下图给出了具有 On Completion 优先级限制的 ActiveX Script 任务和 Send Mail 任务。当 ActiveX Script 任务完成后（不论成功还是失败），Send Mail 任务都开始运行。</p>
		<div style="WIDTH: 284px">
				<img height="55" alt="图3：具有On Completion优先级限制的ActiveX脚本任务和发送邮件任务" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql25.gif" width="284" border="0" />
				<br />
				<p class="figureCaption">
						<b>图3：具有 On Completion 优先级限制的 ActiveX Script 任务和 Send Mail 任务</b>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>您可以配置不同的 Send Mail 任务，一个用于 On Success 限制，另一个用于 On Failure 限制。这两个 Send Mail 任务可以根据 ActiveX Script 的成功或失败来发送不同的邮件。</p>
		<div style="WIDTH: 303px">
				<img height="155" alt="图4：邮件任务" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql26.gif" width="303" border="0" />
				<br />
				<p class="figureCaption">
						<b>图4：邮件任务</b>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>您也可以在一个任务上应用多个优先级限制。例如， Send Mail 任务"Admin Notification"可以具有来自脚本#1的 On Success 限制和来自脚本#2 的 On Failure 限制。在这种情况下，DTS 认为其使用逻辑"AND"关系。因此为了发送 Admin Notification 邮件，脚本#1必须成功执行，而脚本#2 必须失败。</p>
		<div style="WIDTH: 306px">
				<img height="155" alt="图5：同一任务多个优先级限制的示例" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql27.gif" width="306" border="0" />
				<br />
				<p class="figureCaption">
						<b>图5：同一任务多个优先级限制的示例</b>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>
				<b>连接：访问和移动数据</b>
		</p>
		<p>为了成功地执行复制和转换数据的 DTS 任务，DTS 数据包必须与其来源和目标之间建立有效的连接，同样需要连接到其他数据源（例如查询表）</p>
		<p>在创建数据包时，您可以从有效 OLE DB 提供商和 ODBC 驱动程序列表中选择连接类型，对连接进行配置。可用的连接类型包括：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft 数据访问组件(MDAC)驱动程序</p>
										<table class="dataTable" id="EVHAC" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql28" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql28.gif" width="14" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Microsoft OLE DB Provider for SQL Server</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql29" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql29.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Microsoft 数据链接</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql30" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql30.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Microsoft ODBC Driver for Oracle</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft Jet 驱动程序</p>
										<table class="dataTable" id="EZIAC" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="17" alt="dtssql31" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql31.gif" width="20" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">dBase 5</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql32" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql32.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Microsoft Access</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql33" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql33.gif" width="20" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">HTML 文件（来源）</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql34" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql34.gif" width="21" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Microsoft Excel 97-2000</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql35" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql35.gif" width="13" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">Paradox 5.X</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>其他驱动程序</p>
										<table class="dataTable" id="ENKAC" cellspacing="0" cellpadding="0" width="90%">
												<thead>
												</thead>
												<tbody>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql36" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql36.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">文本文件（来源）</p>
																</td>
														</tr>
														<tr class="evenRecord" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="19" alt="dtssql37" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql37.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">文本文件（目标）</p>
																</td>
														</tr>
														<tr class="record" valign="top">
																<td>
																		<p class="lastInCell">
																				<img height="18" alt="dtssql38" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql38.gif" width="19" border="0" />
																		</p>
																</td>
																<td style="BORDER-RIGHT: #cccccc 1px solid">
																		<p class="lastInCell">其他连接</p>
																</td>
														</tr>
												</tbody>
										</table>
										<div class="dataTableBottomMargin">
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<p>DTS 允许您使用任何 OLE DB 连接。连接工具栏中的图标为常用连接提供了方便的访问方式。</p>
		<p>下图介绍了一个具有两个连接的数据包。数据被从一个 Access 数据库（来源连接）复制到 SQL Server 生产数据库（目标连接）。</p>
		<div style="WIDTH: 335px">
				<img height="72" alt="图6：具有两个连接的数据包示例" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql39.gif" width="335" border="0" />
				<br />
				<p class="figureCaption">
						<b>图6：具有两个连接的数据包示例</b>
						<br />
						<a href="http://www.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql39_BIG.gif" target="_blank">查看大图。</a>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>这个数据包的第一步是一个执行 SQL 任务，该任务检查是否已经存在目标表。如果已经存在，这个表将被删除并重新创建。在成功的完成了执行 SQL 任务后，数据在第二步中被复制到 SQL Server 数据库。如果复制操作失败，则在第三步中发送一封电子邮件。</p>
		<p>
				<b>数据泵：转换数据</b>
		</p>
		<p>DTS 数据泵是一个 DTS 对象，用来驱动数据的导入、导出和转换。在转换数据、数据驱动的查询以及平行数据泵任务中将使用这个数据泵。这些任务将在来源和目标连接中创建数据行组，然后创建数据泵实例，将数据行在来源和目标之间移动。在数据行被复制时，对每一行进行数据转换。</p>
		<p>下图的步骤 2 中，在 Access DB 任务和 SQL Production DB 任务之间使用了一个转换数据任务。转换数据任务是两个连接之间的灰色箭头。</p>
		<div style="WIDTH: 335px">
				<img height="72" alt="图7：转换数据任务的示例" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql40.gif" width="335" border="0" />
				<br />
				<p class="figureCaption">
						<b>图7：转换数据任务的示例</b>
						<br />
						<a href="http://www.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql40_BIG.gif" target="_blank">查看大图。</a>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>为了定义从来源连接收集到的数据，您可以为这个转换任务创建一个查询。DTS 支持参数化的查询，允许您在查询执行时定义查询值。</p>
		<p>您可以在该任务的<b>属性</b>对话框中键入这个查询。或者使用数据转换服务查询设计器（Data Transformation Services Query Designer），该工具可以用来为 DTS 任务图形化地创建查询。下图中，使用查询设计器构建了一个将三个表加入到<b>pubs</b>数据库中的查询。</p>
		<div style="WIDTH: 335px">
				<img height="240" alt="图8：数据转换服务查询设计器界面" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql41.gif" width="335" border="0" />
				<br />
				<p class="figureCaption">
						<b>图8：数据转换服务查询设计器界面</b>
						<br />
						<a href="http://www.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql41_BIG.gif" target="_blank">查看大图。</a>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>在转换任务中，您也可以定义对数据做出的更改。下表解释了 DTS 提供的内置转换功能。</p>
		<table class="dataTable" id="ECNAC" cellspacing="0" cellpadding="0" width="90%">
				<thead>
						<tr class="stdHeader" valign="top">
								<td id="colEFNAC" width="27%">转换</td>
								<td id="colEJNAC" style="BORDER-RIGHT: #cccccc 1px solid" width="73%">说明</td>
						</tr>
				</thead>
				<tbody>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">复制数据栏</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来直接将数据从来源复制到目标数据栏中，对数据不进行任何转换。</p>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">ActiveX 脚本</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来构建定制的转换。请注意，由于转换是逐行进行的，因此ActiveX 脚本可能会影响 DTS 数据包的执行速度。</p>
								</td>
						</tr>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">日期事件字符串</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来将来源数据栏中的日期或事件转换为目标数据栏中不同的格式。</p>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">小写字母字符串</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来将来源数据栏中的小写字母转换（如果需要）为目标数据栏的数据类型。</p>
								</td>
						</tr>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">大写字母字符串</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来将来源数据栏中的所有大写字母转换（如果需要）为目标数据栏的数据类型。</p>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">字符串中段</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来从来源数据栏中提取子字符串，将其转换，然后将结果复制到目标数据栏中。</p>
								</td>
						</tr>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">修剪字符串</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用于删除来源数据栏中字符串前、后和中间的空白，并将结果复制到目标数据栏中。</p>
								</td>
						</tr>
						<tr class="evenRecord" valign="top">
								<td>
										<p class="lastInCell">读取文件</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来打开来源数据栏中所指定的文件的内容，并将其内容复制到目标数据栏中。</p>
								</td>
						</tr>
						<tr class="record" valign="top">
								<td>
										<p class="lastInCell">写入文件</p>
								</td>
								<td style="BORDER-RIGHT: #cccccc 1px solid">
										<p class="lastInCell">用来将来源数据栏（数据）的内容复制到文件中，该文件的路径由第二个来源数据栏（文件名）指定。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<div class="dataTableBottomMargin">
		</div>
		<p>您也可以通过编程创建自己的定制转换。创建定制转换的最快方法是使用活动模板库（Active Template Library，ATL）定制转换模板，该模板包含在 SQL Server 2000 DTS 示例程序中。</p>
		<h3>数据泵错误日志</h3>
		<p>SQL Server 2000中 拥有一种记录转换错误的新方法。您可以定义三种异常日志文件，用于数据包执行过程：错误文本文件、来源错误数据行文件以及目标错误数据行文件。</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>常规错误信息被写入到错误文本文件中。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>如果转换过程失败，那么来源数据行将出现错误，并将该行写入到来源错误数据行文件中。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>如果插入过程失败，那么目标数据行将出现错误，并将该行写入到目标错误数据行文件中。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>异常日志文件被定义在转换数据的任务中。每个转换任务可以拥有它自己的日志文件。</p>
		<p>
				<b>数据泵阶段</b>
		</p>
		<p>在默认情况下，数据泵只有一个阶段：数据行转换。这个阶段就是您所配置的在转换数据任务、数据驱动的查询任务以及平行数据泵任务中的数据栏转换，而不选择阶段。</p>
		<p>多数据泵阶段功能是 SQL Server 2000 中所新增的。通过在 SQL Server Enterprise Manager 中选中多段数据泵选项，您可以在操作过程中的不同地方访问数据泵，添加功能。</p>
		<p>在将一行数据从来源复制到目标时，数据泵按照下图所示的基本程序进行操作。</p>
		<div style="WIDTH: 335px">
				<img height="237" alt="图9：数据泵过程" src="http://img.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql42.gif" width="335" border="0" />
				<br />
				<p class="figureCaption">
						<b>图9：数据泵过程</b>
						<br />
						<a href="http://www.microsoft.com/china/technet/images/prodtechnol/sql/2000/deploy/images/dtssql42_BIG.gif" target="_blank">查看大图。</a>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>在数据泵处理完最后一行数据后，任务完成，数据泵操作结束。</p>
		<p>如果高级用户需要在数据包中添加功能，使其支持任何数据泵阶段，他可以这样做：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>为每个定制的数据泵阶段编写一个ActiveX脚本阶段。如果您使用ActiveX脚本功能来定制数据泵阶段，不需要任何数据包以外的代码。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>在 Microsoft Visual C++ 中创建 COM 对象，定制所选中的数据泵阶段。您在数据包以外开发这个程序，转换的每个所选中的阶段都将调用这个程序。与访问数据泵阶段的 ActieX 脚本方法不同的是，ActiveX 脚本方法为每个选中的阶段使用不同的功能和入口点，而这种方法提供了单一入口点，由多个数据泵阶段在任务执行过程中调用。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">返回页首</a>
		</div>
		<a name="ECAAE">
		</a>
		<h2>保存 DTS 数据包的选项</h2>
		<p>下列选项可以保存 DTS 数据包：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft SQL Server</p>
										<p>如果您希望在任何网络中的 SQL Server 实例中保存数据包，请将您的 DTS 数据包保存在 Microsoft SQL Server 上，并保留这些数据包的清单，在数据包开发过程中添加和删除数据包版本。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>SQL Server 2000 元数据服务</p>
										<p>如果您计划跟踪数据包版本、元数据和数据血统信息，请将 DTS 数据包保存在元数据服务上。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>结构化的存储文件</p>
										<p>如果您需要在网络中复制、移动和发送数据包，而不想把数据包存储到 Microsoft SQL Server 数据库中，请将 DTS 数据包保存为结构化的存储文件。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft Visual Basic</p>
										<p>如果您希望将其集成到 Visual Basic 程序中，或作为 DTS 应用程序开发的原型，请将由 DTS Designer 和 DTS 导入/导出向导创建的 DTS 数据包保存为 Microsoft Visual Basic 文件。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/technet/prodtechnol/sql/2000/deploy/dtssql2k.mspx#top">返回页首</a>
		</div>
		<a name="ETAAE">
		</a>
		<h2>将 DTS 作为应用程序开发平台</h2>
		<p>DTS Designer 提供了多种数据移动任务的解决方案。DTS 通过提供对 DTS 对象模型的程序化访问，扩展了许多可用的解决方案。使用Microsoft Visual Basic、Microsoft Visual C++ 或其他支持 COM 的应用程序开发系统 ，您可以为您的环境开发一个定制的 DTS 解决方案，使用图形工具中所不支持的功能。</p>
		<p>DTS 以多种不同的方式为开发人员提供支持：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>构建数据包</p>
										<p>您可以开发极其复杂的数据包，访问对象模型中的所有功能，而不需要使用 DTS Designer 或 DTS 导入/导出向导。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>扩展数据包</p>
										<p>您可以通过定制的任务和转换来增加新的功能，这些任务和转换是专门为您的业务定制的，并且能在DTS中重复使用。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>执行数据包</p>
										<p>DTS 数据包的执行不需要基于任何所提供的工具，可以通过 COM 事件通过编程执行 DTS 数据包和显示过程，允许构建嵌入式或定制的 DTS 执行环境。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>所提供的 DTS 程序示例能够帮助您了解 DTS 编程。这些示例与 SQL Server 2000 一同安装。</p>
		<p>如果您要开发 DTS 应用程序，那么您可以重新分配 DTS 文件。更多信息，请参考 SQL Server 2000 光盘的 Redist.txt 文件。</p>
		<h3>更多信息</h3>
		<p>Microsoft SQL Server 2000 Books Online中拥有许多有关 DTS、使用DTS应用程序以及构建定制解决方案的信息。其他信息，请参考下列资源：</p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft SQL Server Web站点，地址为<a href="http://www.microsoft.com/china/sql/">http://www.microsoft.com/china/sql/</a>。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft SQL Server Developer Center，地址为http://msdn.microsoft.com/library/default.asp?URL=/sqlserver/。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>SQL Server Magazine，地址为<a href="http://www.sqlmag.com/">http://www.sqlmag.com/ [英文]</a>。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft.public.sqlserver.server和 microsoft.public.sqlserver.datawarehouse新闻组，地址为 news://news.microsoft.com。</p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>关于SQL Server的微软官方课程（Microsoft Official Curriculum）。如需了解最新的课程信息，请访问Microsoft Training and Services Web站点，地址为<a href="http://www.microsoft.com/traincert/default.asp">http://www.microsoft.com/traincert/default.asp [英文]</a></p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>本文档所提供的信息资料仅代表Microsoft公司在信息发布当日就研讨活动所围绕的问题持有的临时观点。鉴于Microsoft公司必须针对瞬息万变的市场状况不断做出相应调整，故而，本文档内容不应被解释为Microsoft方面所做出的任何承诺，与此同时，Microsoft也无法在发布之日后继续保证文件所含信息的准确性。</p>
		<p>本白皮书仅供用于信息参考目的。Microsoft并未在本文档中提供任何形式的保证、明示或暗示。</p>
		<p>遵守所有适用版权法律是文档使用者所应承担的义务。Microsoft公司虽未在版权保护下就与本文档相关的权利做出任何限定，但是，任何人未经Microsoft公司书面授权许可，均不得出于任何目的、以任何形式、利用任何手段（电子、机械、影印、录音等）将本文档的任何组成部分制作成拷贝、存储或引入检索系统、亦或向任何对象进行传送。 </p>
		<p>Microsoft公司可能就本文档所涉及的主题拥有专利、专利申请、商标、版权或其它形式的知识产权。除非已同Microsoft公司签订书面许可协议，并根据协议条款获得明确授权，任何出示本文档的行为均无法使您具备针对上述专利、商标、版权或其它知识产权加以利用的许可权限。</p>
		<p>?2000 Microsoft Corporation. 保留所有权利.</p>
		<p>Microsoft、ActiveX、JScript、Visual Basic和Visual C++ 均系Microsoft公司在美国和/或其它国家所拥有的注册商标或商标。</p>
		<p>本文档所涉及的其它公司和产品的真实名称均为其各自所有者持有的商标。</p>
<img src ="http://www.blogjava.net/Daniel2005/aggbug/83264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2006-11-24 15:07 <a href="http://www.blogjava.net/Daniel2005/articles/83264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理MSDN中的SqlConnection.ConnectionString 属性 </title><link>http://www.blogjava.net/Daniel2005/articles/54638.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Fri, 23 Jun 2006 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/54638.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/54638.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/54638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/54638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/54638.html</trackback:ping><description><![CDATA[
		<div class="postbody">
				<p>MSDN中文版中，阿很多不该翻译的翻译了，或者翻译的有问题。我在参阅英文版MSDN和中文版MSDN基础上，跟据自己的经验，把数据库连接字符串整理了一下，具体如下：</p>
				<p>英文版可以看以下地址：</p>
				<p>
						<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp</a>
				</p>
				<h1 class="dtH1">SqlConnection.ConnectionString 属性</h1>
				<p>
						<b>ConnectionString</b> 类似于 OLE DB 连接字符串，但并不相同。与 OLE DB 或 ADO 不同，如果“Persist Security Info ”值设置为 <b>false</b>（默认值），则返回的连接字符串与用户设置的 <b>ConnectionString</b> 相同但去除了安全信息。除非将“Persist Security Info ”设置为 <b>true</b>，否则，SQL Server .NET Framework 数据提供程序将不会保持，也不会返回连接字符串中的密码。</p>
				<p>可以使用 <b>ConnectionString</b> 属性连接到数据库。下面的示例阐释了一个典型的连接字符串。</p>
				<pre class="code">"Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer"</pre>
				<p>
				</p>
				<p>只有在连接关闭时才能设置 <b>ConnectionString</b> 属性。许多连接字符串值都具有相应的只读属性。当设置连接字符串时，将更新所有这些属性（除非检测到错误）。检测到错误时，不会更新任何属性。SqlConnection 属性只返回那些包含在 <b>ConnectionString</b> 中的设置。</p>
				<p>若要连接到本地机器，请将服务器指定为“(local)”。（必须始终指定一个服务器。）</p>
				<p>重置已关闭连接上的 <b>ConnectionString</b> 会重置包括密码在内的所有连接字符串值（和相关属性）。例如，如果设置一个连接字符串，其中包含“Database= northwind”，然后再将该连接字符串重置为“Data Source=myserver;Integrated Security=SSPI”，则 Database 属性将不再设置为 Northwind。</p>
				<p>在设置后会立即分析连接字符串。如果在分析时发现语法中有错误，则产生运行库异常，如 ArgumentException。只有当试图打开连接时，才会发现其他错误。</p>
				<p>连接字符串的基本格式包括一系列由分号分隔的关键字/值对。等号 (=) 连接各个关键字及其值。若要包括含有分号、单引号字符或双引号字符的值，则该值必须用双引号括起来。如果该值同时包含分号和双引号字符，则该值可以用单引号括起来。如果该值以双引号字符开始，则还可以使用单引号。相反地，如果该值以单引号开始，则可以使用双引号。如果该值同时包含单引号和双引号字符，则用于将值括起来的引号字符每次出现时，都必须成对出现。</p>
				<p>若要在字符串值中包括前导或尾随空格，则该值必须用单引号或双引号括起来。即使将整数、布尔值或枚举值用引号括起来，其周围的任何前导或尾随空格也将被忽略。然而，保留字符串关键字或值内的空格。使用 .NET Framework 1.1 版时，在连接字符串中可以使用单引号或双引号而不用使用分隔符（例如，Data Source= my'Server 或 Data Source= my"Server），但引号字符不可以为值的第一个或最后一个字符。</p>
				<p>若要在关键字或值中包括等号 (=)，则它之前必须还有另一个等号。例如，在假设的连接字符串中，</p>
				<pre class="code">"key==word=value"</pre>
				<p>
				</p>
				<p>关键字是“key=word”并且值是“value”。</p>
				<p>如果“keyword= value”对中的一个特定关键字多次出现在连接字符串中，则将所列出的最后一个用于值集。</p>
				<p>关键字不区分大小写。</p>
				<p>下表列出了 <b>ConnectionString</b> 中的关键字值的有效名称。</p>
				<p>
				</p>
				<table class="dtTABLE" id="table2" cellspacing="0" width="500">
						<tbody>
								<tr valign="top">
										<th width="32%">名称</th>
										<th>默认值</th>
										<th width="34%">说明</th>
								</tr>
								<tr valign="top">
										<td width="32%">Application Name</td>
										<td> </td>
										<td width="34%">应用程序的名称，如果不提供应用程序名称，默认是：“.Net SqlClient Data Provider”</td>
								</tr>
								<tr valign="top">
										<td width="32%">AttachDBFilename<br />- 或 -<br />extended properties<br />- 或 -<br />Initial File Name </td>
										<td> </td>
										<td width="34%">可连接数据库的主文件的名称，包括完整的路径名。 
<p>必须使用关键字“database”来指定数据库的名称。</p></td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Connect Timeout <br />- 或 -<br />Connection Timeout</p>
										</td>
										<td>15</td>
										<td width="34%">在终止尝试连接并产生错误之前，等待与服务器的连接的时间长度（以秒为单位）。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Current Language</td>
										<td> </td>
										<td width="34%">SQL Server 语言</td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Data Source <br />- 或 -<br />Server<br />- 或 -<br />Address<br />- 或 -<br />Addr<br />- 或 -<br />Network Address</p>
										</td>
										<td> </td>
										<td width="34%">要连接的 SQL Server 实例的名称或网络地址。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Encrypt</td>
										<td>'false'</td>
										<td width="34%">当该值为 <b>true</b> 时，如果服务器端安装了证书，则 SQL Server 将对所有在客户端和服务器之间传送的数据使用 SSL 加密。可识别的值为 <b>true</b>、<b>false</b>、<b>yes</b> 和 <b>no</b>。</td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Initial Catalog<br />- 或 -<br />Database</p>
										</td>
										<td> </td>
										<td width="34%">数据库的名称。</td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Integrated Security <br />- 或 -<br />Trusted_Connection</p>
										</td>
										<td>'false'</td>
										<td width="34%">当为 <b>false</b> 时，将在连接中指定用户 ID 和密码。当为 <b>true</b> 时，将使用当前的 Windows 帐户凭据进行身份验证。 
<p>可识别的值为 <b>true</b>、<b>false</b>、<b>yes</b>、<b>no</b> 以及与 <b>true</b> 等效的 <b>sspi</b>（强烈推荐）。</p></td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Network Library <br />- 或 -<br />Net</p>
										</td>
										<td>'dbmssocn'</td>
										<td width="34%">用于建立与 SQL Server 实例的连接的网络库。支持的值包括 dbnmpntw（命名管道）、dbmsrpcn（多协议）、dbmsadsn (Apple Talk)、dbmsgnet (VIA)、dbmslpcn（共享内存）及 dbmsspxn (IPX/SPX) 和 dbmssocn (TCP/IP)。 
<p>相应的网络 DLL 必须安装在要连接的系统上。如果不指定网络而使用一个本地服务器（比如“.”或“(local)”），则使用共享内存。</p></td>
								</tr>
								<tr valign="top">
										<td width="32%">Packet Size</td>
										<td>8192</td>
										<td width="34%">用来与 SQL Server 的实例进行通讯的网络数据包的大小，以字节为单位。</td>
								</tr>
								<tr valign="top">
										<td width="32%">
												<p>Password <br />- 或 -<br />Pwd</p>
										</td>
										<td> </td>
										<td width="34%">SQL Server 帐户登录的密码（建议不要使用。为了维护最高级别的安全性，强烈建议改用 Integrated Security 或 Trusted_Connection 关键字）。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Persist Security Info</td>
										<td>'false'</td>
										<td width="34%">当该值设置为 <b>false</b> 或 <b>no</b>（强烈推荐）时，如果连接是打开的或者一直处于打开状态，那么安全敏感信息（如密码）将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为 <b>true</b>、<b>false</b>、<b>yes</b> 和 <b>no</b>。</td>
								</tr>
								<tr valign="top">
										<td width="32%">User ID</td>
										<td> </td>
										<td width="34%">SQL Server 登录帐户（建议不要使用。为了维护最高级别的安全性，强烈建议改用 Integrated Security 或 Trusted_Connection 关键字）。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Workstation ID</td>
										<td>本地计算机名称</td>
										<td width="34%">连接到 SQL Server 的工作站的名称。</td>
								</tr>
						</tbody>
				</table>
				<p>下表列出了 <b>ConnectionString</b> 内连接池值的有效名称。有关连接池的更多信息，请参见 SQL Server .NET Framework 数据提供程序连接池。</p>
				<p>
				</p>
				<table class="dtTABLE" id="table3" cellspacing="0" width="500">
						<tbody>
								<tr valign="top">
										<th width="32%">名称</th>
										<th width="34%">默认值</th>
										<th width="34%">说明</th>
								</tr>
								<tr valign="top">
										<td width="32%">Connection Lifetime</td>
										<td width="34%">0</td>
										<td width="34%">当连接被返回到池时，将其创建时间与当前时间作比较，如果时间长度（以秒为单位）超出了由 <b>Connection Lifetime</b> 指定的值，该连接就会被销毁。这在聚集配置中很有用（用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡）。 
<p>零 (0) 值将使池连接具有最大的连接超时。</p></td>
								</tr>
								<tr valign="top">
										<td width="32%">Connection Reset</td>
										<td width="34%">'true'</td>
										<td width="34%">确定从池中提取数据库连接时是否重置数据库连接。对于 Microsoft SQL Server 7.0 版，设置为 <b>false</b> 可避免获取连接时再有一次额外的服务器往返行程，但须注意此时并未重置连接状态（如数据库上下文）。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Enlist</td>
										<td width="34%">'true'</td>
										<td width="34%">当该值为 <b>true</b> 时，池程序在创建线程的当前事务上下文中自动登记连接。可识别的值为 <b>true</b>、<b>false</b>、<b>yes</b> 和 <b>no</b>。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Max Pool Size</td>
										<td width="34%">100</td>
										<td width="34%">池中允许的最大连接数。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Min Pool Size</td>
										<td width="34%">0</td>
										<td width="34%">池中允许的最小连接数。</td>
								</tr>
								<tr valign="top">
										<td width="32%">Pooling</td>
										<td width="34%">'true'</td>
										<td width="34%">当该值为 <b>true</b> 时，系统将从相应池中提取 <b>SQLConnection</b> 对象，或在必要时创建该对象并将其添加到相应池中。可识别的值为 <b>true</b>、<b>false</b>、<b>yes</b> 和 <b>no</b>。</td>
								</tr>
						</tbody>
				</table>
				<p>当设置需要布尔值的关键字或连接池值时，您可以使用 'yes' 代替 'true'，'no' 代替 'false'。整数值表示为字符串。</p>
				<p>
						<b class="le">注意</b>   SQL Server .NET Framework 数据提供程序使用它自己的协议与 SQL Server 进行通信。因此，当连接到 SQL Server 时，它不支持 ODBC 数据源名称 (DSN) 的使用，因为它不添加 ODBC 层。 <b class="le">警告</b>   在此版本中，在应用程序中根据用户输入构造连接字符串时（例如，从对话框中检索用户 ID 和密码信息并将其追加到连接字符串时）应相当谨慎。应用程序应确保用户无法在这些值中嵌入额外的连接字符串参数（例如，输入“validpassword;database=somedb”作为密码，以试图连接到其他数据库）。 </p>
				<h4 class="dtH4">示例</h4>
				<p style="DISPLAY: block">
						<span class="lang" style="DISPLAY: none">[Visual Basic, C#]</span> 下面的示例创建一个 SqlConnection并设置它的一些属性。</p>
				<pre class="code">
						<span class="lang" style="DISPLAY: none">[Visual Basic]</span> 
Public Sub CreateSqlConnection()
    Dim myConnection As New SqlConnection()
    myConnection.ConnectionString = <br />"Persist Security Info=False;Integrated Security=SSPI;<br />database=northwind;server=mySQLServer;Connect Timeout=30"
    myConnection.Open()
End Sub 'CreateSqlConnection</pre>
				<p>
				</p>
				<pre class="code">
						<span class="lang" style="DISPLAY: none">[C#]</span> 
public void CreateSqlConnection() 
 {
    SqlConnection myConnection = new SqlConnection();
    myConnection.ConnectionString = <br />"Persist Security Info=False;Integrated Security=SSPI;<br />database=northwind;server=mySQLServer;Connect Timeout=30";
    myConnection.Open();
 }</pre>
		</div>
<img src ="http://www.blogjava.net/Daniel2005/aggbug/54638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2006-06-23 11:06 <a href="http://www.blogjava.net/Daniel2005/articles/54638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库结构设计小结</title><link>http://www.blogjava.net/Daniel2005/articles/34706.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Fri, 10 Mar 2006 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/34706.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/34706.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/34706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/34706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/34706.html</trackback:ping><description><![CDATA[数据库设计的理论与方法<BR>1 数据库设计概述<BR>数据库（database）是数据管理的最新技术，具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点。所谓数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。[王珊,陈红. 数据库系统原理教程. 北京:清华大学出版社, 1998.7]数据库中的数据按一定的数据模型组织、描述和储存，具有较小的冗余度、较高的数据独立性和易扩展性，并可为各种用户共享。数据库的应用已经越来越广泛了，不仅大型计算机及中小型计算机，甚至微型计算机都用先进的数据库技术来保持系统数据的整体性、完整性和共享性。<BR>数据库设计（database design）是将业务对象转换为表和视图等数据库对象的过程。[Ryan K. Stephens, Ronald R. Plew. Database Design. Macmillan Computer Publishing U.S.A, 2001]数据库设计是数据库应用系统开发过程中首要的和基本的内容。数据库是信息系统的核心和基础。它把信息系统中的大量数据按照一定的模型组织起来，提供存储、维护、检索数据的功能，是信息系统可以方便、及时、准确从数据库中获取所需的信息。一个信息系统的各个部分能否紧密的结合在一起以及如何结合，关键在数据库。因此必须对数据库进行合理设计。<BR>按照规范设计的方法，考虑数据库及其应用系统开发全过程，将数据库设计分为以下六个阶段：<BR>（1）需求分析<BR>（2）概念结构设计<BR>（3）逻辑结构设计<BR>（4）物理机构设计<BR>（5）数据库实施<BR>（6）数据库运行与维护<BR>2 数据库需求分析<BR>进行整个数据库设计必须准确了解与分析用户需求（包括数据和处理）。需求分析是整个设计过程的基础，是最困难、最耗费时间的一步。作为地基的需求分析是否做得充分与准确，决定了在其上构建数据库大厦的速度和质量。<BR>需求分析的任务是通过详细调查现实世界要处理的对象（组织、部门、企业等），充分了解原系统（手工系统或计算机系统）工作概况，明确用户的各种需求，然后在此基础上确定新系统的功能。<BR>需求分析调查的重点是“数据”和“处理”，通过调查、收集和分析，获得用户对数据库的如下需求： <BR>（1）信息需求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求，即在数据库中需要存储哪些数据。<BR>（2）处理要求。指用户需要完成什么处理功能。明确用户对数据有什么样的处理要求，从而确定数据之间的相互关系。<BR>（3）安全性与完整性要求。<BR>3 数据库概念结构设计<BR>概念结构设计是将分析得到的用户需求抽象为概念模型的过程。即在需求分析的基础上，设计出能够满足用户需求的各种实体以及它们之间的相互关系概念结构设计模型。这样才能更好地、更准确地用某一DBMS实现这些需求。它是整个数据库设计的关键。<BR>概念结构的主要特点是能真实、充分地反映现实世界；易于理解；易于更改；易于向关系、网状、层次等各种数据模型转换。描述概念模型的有力工具是E-R模型。<BR>设计概念结构通常有四类方法：<BR>（1）自顶向下。即首先定义全局概念结构的框架，然后逐步细化；<BR>（2）自底向上。即首先定义各局部应用的概念结构，然后将它们集成起来，得到全局概念结构；<BR>（3）逐步扩张。首先定义最重要的核心概念结构，然后向外扩充，以滚雪球的方式逐步生成其他概念结构，直至总体概念结构；<BR>（4）混合策略。即将自顶向下和自底向上相结合，用自顶向下策略设计一个全局概念结构的框架，以它为骨架集成由自底向上策略中设计的各局部概念结构。其中最经常采用的策略是自底向上方法。即自顶向下进行需求分析，然后再自底向上设计概念结构。[萨师煊,王珊. 数据库系统概论(第三版). 北京:高等教育出版社, 2003]<BR>4 数据库逻辑结构设计<BR>概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。<BR>设计逻辑结构时一般要分三步进行：<BR>（1）将概念结构转换为一般的关系、网状、层次模型；<BR>（2）将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换；<BR>（3）对数据模型进行优化。[Abraham Silberschatz, Henry F. Korth, S. Sudarshan. Database System Concepts, Fourth Edition. McGraw-Hill Companies, Inc, 2002]<BR>数据库的概念结构和逻辑结构设计式数据库设计过程中最重要两个环节。<BR>5 数据库物理结构设计<BR>数据库在物理设备上的存储结构与存储方法称为数据库的物理结构，它依赖于给定的计算机系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结果的过程，就是数据库的物理设计。<BR>数据库的物理结构设计通常分为两步：<BR>（1）确定数据库的物理结构，在关系数据库中主要指存取方法和存储结构；<BR>（2）对物理结构进行评价，评价的重点是时间和空间效率。<BR>6 数据库实施、运行和维护<BR>完成数据库的物理设计以后，设计人员就要用RDBMS提供的数据定义语言和其他使用程序将数据库逻辑设计和物理设计结果严格描述出来，成为DBMS可以接受的源代码，再经过调试产生目标模式，然后就可以组织数据入库了。<img src ="http://www.blogjava.net/Daniel2005/aggbug/34706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2006-03-10 18:01 <a href="http://www.blogjava.net/Daniel2005/articles/34706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server CHARINDEX和PATINDEX详解</title><link>http://www.blogjava.net/Daniel2005/articles/29922.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Wed, 08 Feb 2006 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/29922.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/29922.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/29922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/29922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/29922.html</trackback:ping><description><![CDATA[假如你写过很多程序，你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中，在这篇文章中，我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串。我将告诉你这两个函数是如何运转的，解释他们的区别。同时提供一些例子，通过这些例子，你可以可以考虑使用这两个函数来解决很多不同的字符搜索的问题。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX和PATINDEX函数常常用来在一段字符中搜索字符或者字符串。如果被搜索的字符中包含有要搜索的字符，那么这两个函数返回一个非零的整数，这个整数是要搜索的字符在被搜索的字符中的开始位数。PATINDEX函数支持使用通配符来进行搜索，然而CHARINDEX不支持通佩符。接下来，我们逐个分析这两个函数。 <BR>如何使用CHARINDEX函数 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX&nbsp;(&nbsp;expression1&nbsp;,&nbsp;expression2&nbsp;[&nbsp;,&nbsp;start_location&nbsp;]&nbsp;) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression1是要到expression2中寻找的字符中，start_location是CHARINDEX函数开始在expression2中找expression1的位置。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX函数返回一个整数，返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串，那么函数整数“0”。让我们看看下面的函数命令执行的结果： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX(’SQL’,&nbsp;’Microsoft&nbsp;SQL&nbsp;Server’) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个函数命令将返回在“Microsoft&nbsp;SQL&nbsp;Server”中“SQL”的起始位置，在这个例子中，CHARINDEX函数将返回“S”在“Microsoft&nbsp;SQL&nbsp;Server”中的位置11。 <BR>接下来，我们看这个CHARINDEX命令： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX(’7.0’,&nbsp;’Microsoft&nbsp;SQL&nbsp;Server&nbsp;2000’) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这个例子中，CHARINDEX返回零，因为字符串“7.0”&nbsp;不能在“Microsoft&nbsp;SQL&nbsp;Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一个例子，假设你要显示Northwind数据库Customer表前5行联系人列的Last&nbsp;Name。这是前5行数据 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContactName <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------------------------&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maria&nbsp;Anders <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ana&nbsp;Trujillo <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Antonio&nbsp;Moreno <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thomas&nbsp;Hardy <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Christina&nbsp;Berglund <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可以看到，CustomName包含客户的First&nbsp;Name和Last&nbsp;Name，它们之间被一个空格隔开。我用CHARINDX函数确定两个名字中间空格的位置。通过这个方法，我们可以分析ContactName列的空格位置，这样我们可以只显示这个列的last&nbsp;name部分。这是显示Northwind的Customer表前5行last&nbsp;name的记录！ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;top&nbsp;5&nbsp;substring(ContactName,charindex(’&nbsp;’,ContactName)+1&nbsp;, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len(ContactName))&nbsp;as&nbsp;[Last&nbsp;Name]&nbsp;from&nbsp;Northwind.dbo.customers <BR>下面是这个命令输出的结果。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Last&nbsp;Name <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------------------------&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anders <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trujillo <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Moreno <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hardy <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Berglund <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARINDEX函数找到First&nbsp;Name和Last&nbsp;Name之间的空格，所以SUBSTRING函数可以分开ContactName列，这样就只有Last&nbsp;Name被选出。我在CHARINDEX函数返回的整数上加1，这样Last&nbsp;Name不是从空格开始。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在第二个例子中，即如说你要计算记录中，某一个字段包含特定字符的所有记录数。CHARINDEX函数可以方便的解决你的问题。计算Northwind.dbo.Customer表中Addresses字段中包含单词Road或者它的缩写Rd的记录数，选择语句类似这样： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;count(*)&nbsp;from&nbsp;Northwind.dbo.Customers&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;CHARINDEX(’Rd’,Address)&nbsp;&gt;&nbsp;0&nbsp;or&nbsp;CHARINDEX(’Road’,Address)&gt;&nbsp;1&nbsp; <BR>如何使用PATINDEX函数 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATINDEX函数返回字符或者字符串在另一个字符串或者表达式中的起始位置，PATINDEX函数支持搜索字符串中使用通配符，这使PATINDEX函数对于变化的搜索字符串很有价值。PATINDEX函数的命令如下： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATINDEX&nbsp;(&nbsp;’%pattern%’&nbsp;,&nbsp;expression&nbsp;) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern是你要搜索的字符串，expression是被搜索的字符串。一般情况下expression是一个表中的一个字段，pattern的前后需要用“%”标记，除非你搜索的字符串在被收缩的字符串的最前面或者最后面。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和CHARINDEX函数一样，PATINDEX函数返回搜索字符串在被搜索字符串中的起始位置。假如有这样一个PATINDEX函数： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATINDEX(’%BC%’,’ABCD’) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个PATINDEX函数返回的结果是2，这和CHARINDEX函数一样。这里的%标记告诉PATINDEX函数去找字符串“BC”，不管被搜索的字符串中在“BC”的前后有多少字符！ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假如你想知道被搜索字符串是否由特定的字符串开始，你可以省去前面的%标记。PATINDED函数就要这样写： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATINDEX(’AB%’,’ABCD’) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个命令执行的结果返回1，表示搜索的字符串“AB”在被搜索的字符串中“ABCD”被找到。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用通配符可以编辑比我以上举得简单例子复杂得多的搜索字符串。假如说你要确定一个字符串是否包含字母A和Z，还有任何数字，这个PARINDEX函数命令可能像这样： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PATINDEX(’%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%’,’XYZABC123’) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意在上面这个例子中的搜索字符部分使用了很多的通陪符。察看SQL&nbsp;Server联机丛书可以获得更多关于通佩符的信息。接下来，我们用两个例子来看PATINDEX和SELECT怎么联合起来使用。 <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假设你想要找出Northwind.dbo.Categories表中Description字段中是包含单词“Bread”或“bread”的所有记录，那么选择语句就可能是这样： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;Description&nbsp;from&nbsp;Northwind.dbo.Categories <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;patindex(’%[b,B]read%’,description)&nbsp;&gt;&nbsp;0 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里我用通配符来确定大写和小写的“b”。我在Notthwind数据库中执行这个脚本后，得到下面的结果： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------------------------------------------------------- <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Desserts,&nbsp;candies,&nbsp;and&nbsp;sweet&nbsp;breads <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Breads,&nbsp;crackers,&nbsp;pasta,&nbsp;and&nbsp;cereal <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是再用另外一个额外的通配符来查找一些记录的例子。这个例子是如何选出上面的查询结果中，Description字段的第二子字母不是“e”的纪录。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;Description&nbsp;from&nbsp;Northwind.dbo.Categories&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;patindex(’%[b,B]read%’,description)&nbsp;&gt;&nbsp;0&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;patindex(’_[^e]%’,description)&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过在条件语句中增加一个使用^通配符的PATINDEX函数，我们可以过滤掉“Dessert,&nbsp;candies,&nbsp;and&nbsp;sweet&nbsp;breads”这条记录。上面的查询结果只有一条记录。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------------------------------------------------------- <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Breads,&nbsp;crackers,&nbsp;pasta,&nbsp;and&nbsp;cereal&nbsp;&nbsp; <BR>总结 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你现在可以发现CHARINDEX和PATINDEX搜索字符串时的区别了吧。PATINDEX函数支持使用通配符，可以用在很多有变化的查找中。而CHARINDEX不可以。根据你自己不同的情况，这两个函数对你在SQL&nbsp;Server中的字符串的搜索、控制、分析很有帮助。<img src ="http://www.blogjava.net/Daniel2005/aggbug/29922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2006-02-08 14:24 <a href="http://www.blogjava.net/Daniel2005/articles/29922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句导入导出大全</title><link>http://www.blogjava.net/Daniel2005/articles/25592.html</link><dc:creator>泌鲁沙夫</dc:creator><author>泌鲁沙夫</author><pubDate>Tue, 27 Dec 2005 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/Daniel2005/articles/25592.html</guid><wfw:comment>http://www.blogjava.net/Daniel2005/comments/25592.html</wfw:comment><comments>http://www.blogjava.net/Daniel2005/articles/25592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Daniel2005/comments/commentRss/25592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Daniel2005/services/trackbacks/25592.html</trackback:ping><description><![CDATA[<P>选择自 hxcfindjob 的 Blog&nbsp; <BR>关键字&nbsp;&nbsp; SQL语句导入导出大全&nbsp; <BR>出处&nbsp;&nbsp;&nbsp; <BR>&nbsp;<BR>&nbsp;SQL语句导入导出大全 </P>
<P>/*******&nbsp; 导出到excel <BR>EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""’ </P>
<P>/***********&nbsp; 导入Excel <BR>SELECT * <BR>FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’, <BR>&nbsp; ’Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions </P>
<P><BR>SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’　’ 转换后的别名 <BR>FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’, <BR>&nbsp; ’Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions </P>
<P>/** 导入文本文件 <BR>EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’ </P>
<P>/** 导出文本文件 <BR>EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’ <BR>或 <BR>EXEC master..xp_cmdshell ’bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword’ </P>
<P>导出到TXT文本，用逗号分开 <BR>exec master..xp_cmdshell ’bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password’ </P>
<P><BR>BULK INSERT 库名..表名 <BR>FROM ’c:\test.txt’ <BR>WITH ( <BR>&nbsp;&nbsp;&nbsp; FIELDTERMINATOR = ’;’, <BR>&nbsp;&nbsp;&nbsp; ROWTERMINATOR = ’\n’ <BR>) </P>
<P><BR>--/* dBase IV文件 <BR>select * from <BR>OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料4.dbf]’) <BR>--*/ </P>
<P>--/* dBase III文件 <BR>select * from <BR>OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’dBase III;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料3.dbf]’) <BR>--*/ </P>
<P>--/* FoxPro 数据库 <BR>select * from openrowset(’MSDASQL’, <BR>’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’, <BR>’select * from [aa.DBF]’) <BR>--*/ </P>
<P>/**************导入DBF文件****************/ <BR>select * from openrowset(’MSDASQL’, <BR>’Driver=Microsoft Visual FoxPro Driver; <BR>SourceDB=e:\VFP98\data; <BR>SourceType=DBF’, <BR>’select * from customer where country != "USA" order by country’) <BR>go <BR>/***************** 导出到DBF ***************/ <BR>如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句 </P>
<P>insert into openrowset(’MSDASQL’, <BR>’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\’, <BR>’select * from [aa.DBF]’) <BR>select * from 表 </P>
<P>说明: <BR>SourceDB=c:\&nbsp; 指定foxpro表所在的文件夹 <BR>aa.DBF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定foxpro表的文件名. </P>
<P>&nbsp;</P>
<P><BR>/*************导出到Access********************/ <BR>insert into openrowset(’Microsoft.Jet.OLEDB.4.0’, <BR>&nbsp;&nbsp; ’x:\A.mdb’;’admin’;’’,A表) select * from 数据库名..B表 </P>
<P>/*************导入Access********************/ <BR>insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’, <BR>&nbsp;&nbsp; ’x:\A.mdb’;’admin’;’’,A表) </P>
<P>*********************&nbsp; 导入 xml　文件 </P>
<P>DECLARE @idoc int <BR>DECLARE @doc varchar(1000) <BR>--sample XML document <BR>SET @doc =’ <BR>&lt;root&gt; <BR>&nbsp; &lt;Customer cid= "C1" name="Janine" city="Issaquah"&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O1" date="1/20/1996" amount="3.5" /&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O2" date="4/30/1997" amount="13.4"&gt;Customer was very satisfied <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Order&gt; <BR>&nbsp;&nbsp; &lt;/Customer&gt; <BR>&nbsp;&nbsp; &lt;Customer cid="C2" name="Ursula" city="Oelde" &gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; white red"&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Urgency&gt;Important&lt;/Urgency&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Happy Customer. <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Order&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O4" date="1/20/1996" amount="10000"/&gt; <BR>&nbsp;&nbsp; &lt;/Customer&gt; <BR>&lt;/root&gt; <BR>’ <BR>-- Create an internal representation of the XML document. <BR>EXEC sp_xml_preparedocument @idoc OUTPUT, @doc </P>
<P>-- Execute a SELECT statement using OPENXML rowset provider. <BR>SELECT * <BR>FROM OPENXML (@idoc, ’/root/Customer/Order’, 1) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WITH (oid&nbsp;&nbsp;&nbsp;&nbsp; char(5), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; amount&nbsp; float, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment ntext ’text()’) <BR>EXEC sp_xml_removedocument @idoc </P>
<P><BR>/********************导整个数据库*********************************************/ </P>
<P>用bcp实现的存储过程 </P>
<P><BR>/* <BR>&nbsp;实现数据导入/导出的存储过程 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据不同的参数,可以实现导入/导出整个数据库/单个表 <BR>&nbsp;调用示例: <BR>--导出调用示例 <BR>----导出单个表 <BR>exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,1 <BR>----导出整个数据库 <BR>exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,1 </P>
<P>--导入调用示例 <BR>----导入单个表 <BR>exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,0 <BR>----导入整个数据库 <BR>exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,0 </P>
<P>*/ <BR>if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1) <BR>&nbsp;drop procedure File2Table <BR>go <BR>create procedure File2Table <BR>@servername varchar(200)&nbsp; --服务器名 <BR>,@username varchar(200)&nbsp;&nbsp; --用户名,如果用NT验证方式,则为空’’ <BR>,@password varchar(200)&nbsp;&nbsp; --密码 <BR>,@tbname varchar(500)&nbsp;&nbsp; --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表 <BR>,@filename varchar(1000)&nbsp; --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt <BR>,@isout bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1为导出,0为导入 <BR>as <BR>declare @sql varchar(8000) </P>
<P>if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表 <BR>begin <BR>&nbsp;set @sql=’bcp <A href="mailto:’+@tbname">’+@tbname</A> <BR>&nbsp; +case when @isout=1 then ’ out ’ else ’ in ’ end <BR>&nbsp; +’ "<A href="mailto:’+@filename+’">’+@filename+’</A>" /w’ <BR>&nbsp; +’ /S <A href="mailto:’+@servername">’+@servername</A> <BR>&nbsp; +case when isnull(@username,’’)=’’ then ’’ else ’ /U <A href="mailto:’+@username">’+@username</A> end <BR>&nbsp; +’ /P ’+isnull(@password,’’) <BR>&nbsp;exec master..xp_cmdshell @sql <BR>end <BR>else <BR>begin --导出整个数据库,定义游标,取出所有的用户表 <BR>&nbsp;declare @m_tbname varchar(250) <BR>&nbsp;if right(@filename,1)&lt;&gt;’\’ set @filename=@filename+’\’ </P>
<P>&nbsp;set @m_tbname=’declare #tb cursor for select name from <A href="mailto:’+@tbname+’..sysobjects">’+@tbname+’..sysobjects</A> where xtype=’’U’’’ <BR>&nbsp;exec(@m_tbname) <BR>&nbsp;open #tb <BR>&nbsp;fetch next from #tb into @m_tbname <BR>&nbsp;while @@fetch_status=0 <BR>&nbsp;begin <BR>&nbsp; set @sql=’bcp <A href="mailto:’+@tbname+’..’+@m_tbname">’+@tbname+’..’+@m_tbname</A> <BR>&nbsp;&nbsp; +case when @isout=1 then ’ out ’ else ’ in ’ end <BR>&nbsp;&nbsp; +’ "<A href="mailto:’+@filename+@m_tbname+’.txt">’+@filename+@m_tbname+’.txt</A> " /w’ <BR>&nbsp;&nbsp; +’ /S <A href="mailto:’+@servername">’+@servername</A> <BR>&nbsp;&nbsp; +case when isnull(@username,’’)=’’ then ’’ else ’ /U <A href="mailto:’+@username">’+@username</A> end <BR>&nbsp;&nbsp; +’ /P ’+isnull(@password,’’) <BR>&nbsp; exec master..xp_cmdshell @sql <BR>&nbsp; fetch next from #tb into @m_tbname <BR>&nbsp;end <BR>&nbsp;close #tb <BR>&nbsp;deallocate #tb&nbsp; <BR>end <BR>go </P>
<P><BR>/**********************Excel导到Txt****************************************/ <BR>想用 <BR>select * into opendatasource(...) from opendatasource(...) <BR>实现将一个Excel文件内容导入到一个文本文件 </P>
<P>假设Excel中有两列，第一列为姓名，第二列为很行帐号(16位) <BR>且银行帐号导出到文本文件后分两部分，前8位和后8位分开。 </P>
<P><BR>如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2 <BR>然后就可以用下面的语句进行插入 <BR>注意文件名和目录根据你的实际情况进行修改. </P>
<P>insert into <BR>opendatasource(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’Text;HDR=Yes;DATABASE=C:\’ <BR>)...[aa#txt] <BR>--,aa#txt) <BR>--*/ <BR>select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) <BR>from <BR>opendatasource(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’ <BR>--,Sheet1$) <BR>)...[Sheet1$] </P>
<P>如果你想直接插入并生成文本文件,就要用bcp </P>
<P>declare @sql varchar(8000),@tbname varchar(50) </P>
<P>--首先将excel表内容导入到一个全局临时表 <BR>select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’ <BR>&nbsp;,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) <BR>into <A href="mailto:’+@tbname+’">’+@tbname+’</A> from <BR>opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’ <BR>,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’’ <BR>)...[Sheet1$]’ <BR>exec(@sql) </P>
<P>--然后用bcp从全局临时表导出到文本文件 <BR>set @sql=’bcp "<A href="mailto:’+@tbname+’">’+@tbname+’</A>" out "c:\aa.txt" /S"(local)" /P"" /c’ <BR>exec master..xp_cmdshell @sql </P>
<P>--删除临时表 <BR>exec(’drop table <A href="mailto:’+@tbname">’+@tbname</A>) </P>
<P><BR>用bcp将文件导入导出到数据库的存储过程: </P>
<P><BR>/*--bcp-二进制文件的导入导出 </P>
<P>&nbsp;支持image,text,ntext字段的导入/导出 <BR>&nbsp;image适合于二进制文件;text,ntext适合于文本数据文件 </P>
<P>&nbsp;注意:导入时,将覆盖满足条件的所有行 <BR>&nbsp; 导出时,将把所有满足条件的行也出到指定文件中 </P>
<P>&nbsp;此存储过程仅用bcp实现 <BR>邹建 2003.08-----------------*/ </P>
<P>/*--调用示例 <BR>--数据导出 <BR>&nbsp;exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’ </P>
<P>--数据导出 <BR>&nbsp;exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’,’’,0 <BR>--*/ <BR>if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1) <BR>drop procedure [dbo].[p_binaryIO] <BR>GO </P>
<P>Create proc p_binaryIO <BR>@servename varchar (30),--服务器名称 <BR>@username varchar (30), --用户名 <BR>@password varchar (30), --密码 <BR>@tbname varchar (500),&nbsp; --数据库..表名 <BR>@fdname varchar (30),&nbsp; --字段名 <BR>@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak <BR>@tj varchar (1000)=’’,&nbsp; --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀 <BR>@isout bit=1&nbsp;&nbsp; --1导出((默认),0导入 <BR>AS <BR>declare @fname_in varchar(1000) --bcp处理应答文件名 <BR>&nbsp;,@fsize varchar(20)&nbsp;&nbsp; --要处理的文件的大小 <BR>&nbsp;,@m_tbname varchar(50)&nbsp; --临时表名 <BR>&nbsp;,@sql varchar(8000) </P>
<P>--则取得导入文件的大小 <BR>if @isout=1 <BR>&nbsp;set @fsize=’0’ <BR>else <BR>begin <BR>&nbsp;create table #tb(可选名 varchar(20),大小 int <BR>&nbsp; ,创建日期 varchar(10),创建时间 varchar(20) <BR>&nbsp; ,上次写操作日期 varchar(10),上次写操作时间 varchar(20) <BR>&nbsp; ,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int) <BR>&nbsp;insert into #tb <BR>&nbsp;exec master..xp_getfiledetails @fname <BR>&nbsp;select @fsize=大小 from #tb <BR>&nbsp;drop table #tb <BR>&nbsp;if @fsize is null <BR>&nbsp;begin <BR>&nbsp; print ’文件未找到’ <BR>&nbsp; return <BR>&nbsp;end </P>
<P>end </P>
<P>--生成数据处理应答文件 <BR>set @m_tbname=’[##temp’+cast(newid() as varchar(40))+’]’ <BR>set @sql=’select * into <A href="mailto:’+@m_tbname+’">’+@m_tbname+’</A> from( <BR>&nbsp;select null as 类型 <BR>&nbsp;union all select 0 as 前缀 <BR>&nbsp;union all select <A href="mailto:’+@fsize+’">’+@fsize+’</A> as 长度 <BR>&nbsp;union all select null as 结束 <BR>&nbsp;union all select null as 格式 <BR>&nbsp;) a’ <BR>exec(@sql) <BR>select @fname_in=@fname+’_temp’ <BR>&nbsp;,@sql=’bcp "<A href="mailto:’+@m_tbname+’">’+@m_tbname+’</A>" out "<A href="mailto:’+@fname_in">’+@fname_in</A> <BR>&nbsp;+’" /S"<A href="mailto:’+@servename">’+@servename</A> <BR>&nbsp;+case when isnull(@username,’’)=’’ then ’’ <BR>&nbsp; else ’" /U"<A href="mailto:’+@username">’+@username</A> end <BR>&nbsp;+’" /P"’+isnull(@password,’’)+’" /c’ <BR>exec master..xp_cmdshell @sql <BR>--删除临时表 <BR>set @sql=’drop table <A href="mailto:’+@m_tbname">’+@m_tbname</A> <BR>exec(@sql) </P>
<P>if @isout=1 <BR>begin <BR>&nbsp;set @sql=’bcp "select top 1 <A href="mailto:’+@fdname+’">’+@fdname+’</A> from ’ <BR>&nbsp; <A href="mailto:+@tbname+case">+@tbname+case</A> isnull(@tj,’’) when ’’ then ’’ <BR>&nbsp;&nbsp; else ’ where <A href="mailto:’+@tj">’+@tj</A> end <BR>&nbsp; +’" queryout "<A href="mailto:’+@fname">’+@fname</A> <BR>&nbsp; +’" /S"<A href="mailto:’+@servename">’+@servename</A> <BR>&nbsp; +case when isnull(@username,’’)=’’ then ’’ <BR>&nbsp;&nbsp; else ’" /U"<A href="mailto:’+@username">’+@username</A> end <BR>&nbsp; +’" /P"’+isnull(@password,’’) <BR>&nbsp; +’" /i"<A href='mailto:’+@fname_in+’"’'>’+@fname_in+’"’</A> <BR>&nbsp;exec master..xp_cmdshell @sql <BR>end <BR>else <BR>begin <BR>&nbsp;--为数据导入准备临时表 <BR>&nbsp;set @sql=’select top 0 <A href="mailto:’+@fdname+’">’+@fdname+’</A> into ’ <BR>&nbsp; <A href="mailto:+@m_tbname+’">+@m_tbname+’</A> from ’ <A href="mailto:+@tbname">+@tbname</A> <BR>&nbsp;exec(@sql) </P>
<P>&nbsp;--将数据导入到临时表 <BR>&nbsp;set @sql=’bcp "<A href="mailto:’+@m_tbname+’">’+@m_tbname+’</A>" in "<A href="mailto:’+@fname">’+@fname</A> <BR>&nbsp; +’" /S"<A href="mailto:’+@servename">’+@servename</A> <BR>&nbsp; +case when isnull(@username,’’)=’’ then ’’ <BR>&nbsp;&nbsp; else ’" /U"<A href="mailto:’+@username">’+@username</A> end <BR>&nbsp; +’" /P"’+isnull(@password,’’) <BR>&nbsp; +’" /i"<A href='mailto:’+@fname_in+’"’'>’+@fname_in+’"’</A> <BR>&nbsp;exec master..xp_cmdshell @sql <BR>&nbsp; <BR>&nbsp;--将数据导入到正式表中 <BR>&nbsp;set @sql=’update <A href="mailto:’+@tbname">’+@tbname</A> <BR>&nbsp; +’ set <A href="mailto:’+@fdname+’=b.’+@fdname">’+@fdname+’=b.’+@fdname</A> <BR>&nbsp; +’ from <A href="mailto:’+@tbname+’">’+@tbname+’</A> a,’ <BR>&nbsp; <A href="mailto:+@m_tbname+’">+@m_tbname+’</A> b’ <BR>&nbsp; +case isnull(@tj,’’) when ’’ then ’’ <BR>&nbsp;&nbsp; else ’ where <A href="mailto:’+@tj">’+@tj</A> end <BR>&nbsp;exec(@sql) </P>
<P>&nbsp;--删除数据处理临时表 <BR>&nbsp;set @sql=’drop table <A href="mailto:’+@m_tbname">’+@m_tbname</A> <BR>end </P>
<P>--删除数据处理应答文件 <BR>set @sql=’del <A href="mailto:’+@fname_in">’+@fname_in</A> <BR>exec master..xp_cmdshell @sql </P>
<P>go </P>
<P><BR>/** 导入文本文件 <BR>EXEC master..xp_cmdshell ’bcp "dbname..tablename" in c:\DT.txt -c -Sservername -Usa -Ppassword’ </P>
<P>改为如下，不需引号 <BR>EXEC master..xp_cmdshell ’bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword’ </P>
<P>/** 导出文本文件 <BR>EXEC master..xp_cmdshell ’bcp "dbname..tablename" out c:\DT.txt -c -Sservername -Usa -Ppassword’ <BR>此句需加引号 </P>
<P><BR>&nbsp;<BR></P><img src ="http://www.blogjava.net/Daniel2005/aggbug/25592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Daniel2005/" target="_blank">泌鲁沙夫</a> 2005-12-27 16:14 <a href="http://www.blogjava.net/Daniel2005/articles/25592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>