
第11章数据转换服务 SQLServer中的数据传输的工具,例如导入/导出向导、DTS设计器等可以将数据从一个 数据环境传输到另一个数据环境。本章就将介绍数据导入/导出的概念和SQLServer的数据 传输服务,以及使用导入/导出向导和DTS设计器来完成不同数据环境间的数据传输过程。 11.1导入/导出概述 作为一名数据库管理员,经常需要将一个数据环境中的数据传输到另一种数据环境中, 或者是将几种数据环境中的数据经合并后复制到某种数据环境中。这里说的数据环境种类较 多,它有可能是一种应用程序,有可能是不同厂家的数据库管理系统,也有可能是文本文件、 电子邮件或电子表格(Excl)等。将数据从一个数据环境传输到另一个数据环境就是数据的 导入/导出。 导入数据是从SQLServer的外部数据源(如ASCII文本文件)中检索数据,并将数据插入 到SQLServer表的过程。导出数据是将SQLServer实例中的数据析取为某些用户指定格式的 过程,例如将SQLServer表的内容复制到MicrosoftAccess数据库中。 将数据从外部数据源导入SQLServer实例很可能是建立数据库后要执行的第一步。数据 导入SQLServer数据库后,即可开始使用该数据库。 将数据导入SQLServer实例可以是一次性操作,例如将另一个数据库系统中的数据迁移 到SQLServer实例。在初次迁移完成后,该SQLServer数据库将直接用于所有与数据相关的 任务,而不再使用原来的系统。不需要进一步导入数据。 导入数据也可以是不断进行的任务。例如,创建了用于行政报告的新SQLServer数据库, 但是数据驻留在旧式系统中,并且该旧式系统由大量业务应用程序进行更新。在这种情况下, 可以每天或每周将旧式系统中的数据复制或更新到SQLServer实例。 导出数据的发生频率通常较低.SQLServer提供多种工具和功能,使应用程序(如Access 或MicrosoftExcel)可以直接连接并操作数据,而不必在操作数据前先将所有数据从 SQLServer实例复制到该工具中。但是,可能需要定期将数据从SQLServer实例导出。在这 种情况下,可以将数据先导出到文本文件,然后由应用程序读取。或者采用特殊方法复制数 据。例如,可以将SQLServer实例中的数据析取为Excel电子表格格式,并将其存储在便携 式计算机中以便在商务旅行中使用。 SQLServer提供多种工具用于各种数据源的数据导入和导出,这些数据源包括文本文 件、ODBC数据源(例如Oracle数据库)、OLEDB数据源(例如其它SQLServer实例)、ASCII
第 11 章 数据转换服务 SQLServer 中的数据传输的工具,例如导入/导出向导、DTS 设计器等可以将数据从一个 数据环境传输到另一个数据环境。本章就将介绍数据导入/导出的概念和 SQLServer 的数据 传输服务,以及使用导入/导出向导和 DTS 设计器来完成不同数据环境间的数据传输过程。 11.1 导入/导出概述 作为一名数据库管理员,经常需要将一个数据环境中的数据传输到另一种数据环境中, 或者是将几种数据环境中的数据经合并后复制到某种数据环境中。这里说的数据环境种类较 多,它有可能是一种应用程序,有可能是不同厂家的数据库管理系统,也有可能是文本文件、 电子邮件或电子表格(Excel)等。将数据从一个数据环境传输到另一个数据环境就是数据的 导入/导出。 导入数据是从 SQLServer 的外部数据源(如 ASCII 文本文件)中检索数据,并将数据插入 到 SQLServer 表的过程。导出数据是将 SQLServer 实例中的数据析取为某些用户指定格式的 过程,例如将 SQLServer 表的内容复制到 MicrosoftAccess 数据库中。 将数据从外部数据源导入 SQLServer 实例很可能是建立数据库后要执行的第一步。数据 导入 SQLServer 数据库后,即可开始使用该数据库。 将数据导入 SQLServer 实例可以是一次性操作,例如将另一个数据库系统中的数据迁移 到 SQLServer 实例。在初次迁移完成后,该 SQLServer 数据库将直接用于所有与数据相关的 任务,而不再使用原来的系统。不需要进一步导入数据。 导入数据也可以是不断进行的任务。例如,创建了用于行政报告的新 SQLServer 数据库, 但是数据驻留在旧式系统中,并且该旧式系统由大量业务应用程序进行更新。在这种情况下, 可以每天或每周将旧式系统中的数据复制或更新到 SQLServer 实例。 导出数据的发生频率通常较低。SQLServer 提供多种工具和功能,使应用程序(如 Access 或 MicrosoftExcel)可以直接连接并操作数据,而不必在操作数据前先将所有数据从 SQLServer 实例复制到该工具中。但是,可能需要定期将数据从 SQLServer 实例导出。在这 种情况下,可以将数据先导出到文本文件,然后由应用程序读取。或者采用特殊方法复制数 据。例如,可以将 SQLServer 实例中的数据析取为 Excel 电子表格格式,并将其存储在便携 式计算机中以便在商务旅行中使用。 SQLServer 提供多种工具用于各种数据源的数据导入和导出,这些数据源包括文本文 件、ODBC 数据源(例如 Oracle 数据库)、OLEDB 数据源(例如其它 SQLServer 实例)、ASCII

文本文件和Excel电子表格。 此外,SQLServer复制使数据得以在整个企业内发布,在各个位置之间复制数据以及自 动同步不同数据复本之间的更改。 11.2导入数据 SQLServer2000提供多种工具来完成数据的导入,例如DTS导入/导出向导、DTS设计器、 DTS大容量插入操作、bcp大容量复制程序等。由于使用图形界面的“DTS导入/导出向导” 直观、简单。这里,将介绍使用“DTS导入/导出向导”来完成导入Exc1工作表和导入文 本文件的整个过程。 11.2.1导入Exce1工作表 (1)首先在企业管理器中单击“工具”,启动“数据转换服务”中的“DTS导入向导”,系 统弹出如图11-1所示的“DTS导入/导出向导”界面。 (2)单击“下一步”后,用户可以在“选择数据源”对话框中选择数据源。默认的数据源 是“用于SQLServer的MicrosoftOLEDB提供程序”,它用于连接到SQLServer实例。这里, 我们计划将Excel表中的数据导入到SQLServer中,因此需要在“数据源”的下拉列表中选 择“MicrosoftExcels97-2000”,然后单击“文件名”后的省略号按钮以选择要导入的Excel 表的文件名。如图11-2所示。 (3)单击“下一步”,系统弹出如图11-3所示的“选择目的”对话框,目的就是把数据导 入到哪里。可以在“目的”的下拉框中选择是将数据导入到SQLServer、Excel表格或Acess 等其他数据库中。 (4)在服务器里选择目的数据库所在的服务器,在数据库下拉选择框里选择目的数据库的 名称。然后单击“下一步”,系统弹出如图11-4所示的“指定表复制或查询”的对话框。选 择第一项“从源数据库复制表和视图”。 (⑤)单击“下一步”,可以在如图11-5所示的“选择源表和视图”对话框中选择需要复制 的表和视图。这里选择表XSCJ,也可以创建新表或视图。 (6)单击“下一步”按钮,弹出如图11-6所示的“保存、调度和复制包”,在这里可以调 度DTS包的执行时间,这里选择“立即执行”。也可以选择是否保存DTS包,以便以后执行 相同的DTS任务。 (7)单击“下一步”之后,在如图11-7所示的对话框中单击“完成”,即可以完成将Exce1 表导入到数据库的工作。 11.2.2导入文本文件
文本文件和 Excel 电子表格。 此外,SQLServer 复制使数据得以在整个企业内发布,在各个位置之间复制数据以及自 动同步不同数据复本之间的更改。 11.2 导入数据 SQLServer2000 提供多种工具来完成数据的导入,例如 DTS 导入/导出向导、DTS 设计器、 DTS 大容量插入操作、bcp 大容量复制程序等。由于使用图形界面的“DTS 导入/导出向导” 直观、简单。这里,将介绍使用“DTS 导入/导出向导”来完成导入 Excel 工作表和导入文 本文件的整个过程。 11.2.1 导入 Excel 工作表 ⑴首先在企业管理器中单击“工具”,启动“数据转换服务”中的“DTS 导入向导”,系 统弹出如图 11-1 所示的“DTS 导入/导出向导”界面。 ⑵单击“下一步”后,用户可以在“选择数据源”对话框中选择数据源。默认的数据源 是“用于 SQLServer 的 MicrosoftOLEDB 提供程序”,它用于连接到 SQLServer 实例。这里, 我们计划将 Excel 表中的数据导入到 SQLServer 中,因此需要在“数据源”的下拉列表中选 择“MicrosoftExcel97-2000”,然后单击“文件名”后的省略号按钮以选择要导入的 Excel 表的文件名。如图 11-2 所示。 ⑶单击“下一步”,系统弹出如图 11-3 所示的“选择目的”对话框,目的就是把数据导 入到哪里。可以在“目的”的下拉框中选择是将数据导入到 SQLServer、Excel 表格或 Acess 等其他数据库中。 ⑷在服务器里选择目的数据库所在的服务器,在数据库下拉选择框里选择目的数据库的 名称。然后单击“下一步”,系统弹出如图 11-4 所示的“指定表复制或查询”的对话框。选 择第一项“从源数据库复制表和视图”。 ⑸单击“下一步”,可以在如图 11-5 所示的“选择源表和视图”对话框中选择需要复制 的表和视图。这里选择表 XSCJ,也可以创建新表或视图。 ⑹单击“下一步”按钮,弹出如图 11-6 所示的“保存、调度和复制包”,在这里可以调 度 DTS 包的执行时间,这里选择“立即执行”。也可以选择是否保存 DTS 包,以便以后执行 相同的 DTS 任务。 ⑺单击“下一步”之后,在如图 11-7 所示的对话框中单击“完成”,即可以完成将 Excel 表导入到数据库的工作。 11.2.2 导入文本文件

SQLServer2000除了可以将数据表和Excel电子表格的数据导入到数据库中,还可以将 文本文件中的数据导入到SQLServer中。下面我们使用企业管理器中的导入/导出向导将一 个记录了课程信息的文本文件“课程信息.txt”导入到数据库student中的表aaaa中。 (1)首先启动企业管理器中的“导入/导出向导”,在如图11-8所示的“选择数据源”对 话框中的数据源下拉框中选择文本文件,并选择需要导入的文本文件名。 (2)单击“下一步”,在如图11-9所示的“选择文件格式”对话框中,必须根据图中的文 件预览来选择是带分隔符,还是固定宽度的源文件格式,即源文件中数据列与列之间的间隔 方式。如果选择与源文件不一致将会导致错误。 (3)单击“下一步”,在“选择目的”对话框中选择将数据导入到哪个SQLServer服务器 的哪个数据库中,如图11-10所示。 (4)单击“下一步”,在“选择源表和视图”对话框中单击目的下拉框来选择将数据导入 到目的数据库的哪一个数据表,这里选定student数据库的aaaa数据表。同时单击“转换” 按钮,如果数据导入到目的时需要进行转换,就可以在此进行转换设置。如图11-11所示。 (⑤)单击“下一步”,在“保存、调度和复制包”对话框里设置DTS包的运行调度,如图 11-12所示。 (6)单击“下一步”之后,单击“完成”按钮即可完成将文本文件导入到SQLServer中。 之后,如果打开企业管理器中student数据库的aaaa数据表,就会看到文本文件“课程信 息.txt”的数据己经导入到aaaa表中了。如图11-l3所示。 11.3导出数据 SQLServer不仅可以将数据导入,而且也可以将数据导出到其他的数据库、文本文件或 Excel表格等。下面介绍将SQLServer数据库中的数据分别导出到Access数据库和文本文 件的过程。 11.3.1导出数据至Access 导出数据至Access的过程与将Access数据导入数据库的过程相似,不同的是导入/导 出的源和目的不同。将数据库导出到Access,其数据源是SQLServer数据库,其目的是 Accesse 现在计划将SQLServer服务器上的student数据库导出到Access中。如果Access目的 文件不存在,则需要先打开Accesss,并建立一个空的Access数据库,为了保持一致,将 其取名为student.mdb。 (1)首先,打开企业管理器并展开student数据库,然后打开导入/导出向导,在如图11-14
SQLServer2000 除了可以将数据表和 Excel 电子表格的数据导入到数据库中,还可以将 文本文件中的数据导入到 SQLServer 中。下面我们使用企业管理器中的导入/导出向导将一 个记录了课程信息的文本文件“课程信息.txt”导入到数据库 student 中的表 aaaa 中。 ⑴首先启动企业管理器中的“导入/导出向导”,在如图 11-8 所示的“选择数据源”对 话框中的数据源下拉框中选择文本文件,并选择需要导入的文本文件名。 ⑵单击“下一步”,在如图 11-9 所示的“选择文件格式”对话框中,必须根据图中的文 件预览来选择是带分隔符,还是固定宽度的源文件格式,即源文件中数据列与列之间的间隔 方式。如果选择与源文件不一致将会导致错误。 ⑶单击“下一步”,在“选择目的”对话框中选择将数据导入到哪个 SQLServer 服务器 的哪个数据库中,如图 11-10 所示。 ⑷单击“下一步”,在“选择源表和视图”对话框中单击目的下拉框来选择将数据导入 到目的数据库的哪一个数据表,这里选定 student 数据库的 aaaa 数据表。同时单击“转换” 按钮,如果数据导入到目的时需要进行转换,就可以在此进行转换设置。如图 11-11 所示。 ⑸单击“下一步”,在“保存、调度和复制包”对话框里设置 DTS 包的运行调度,如图 11-12 所示。 ⑹单击“下一步”之后,单击“完成”按钮即可完成将文本文件导入到 SQLServer 中。 之后,如果打开企业管理器中 student 数据库的 aaaa 数据表,就会看到文本文件“课程信 息.txt”的数据已经导入到 aaaa 表中了。如图 11-13 所示。 11.3 导出数据 SQLServer 不仅可以将数据导入,而且也可以将数据导出到其他的数据库、文本文件或 Excel 表格等。下面介绍将 SQLServer 数据库中的数据分别导出到 Access 数据库和文本文 件的过程。 11.3.1 导出数据至 Access 导出数据至 Access 的过程与将 Access 数据导入数据库的过程相似,不同的是导入/导 出的源和目的不同。将数据库导出到 Access,其数据源是 SQLServer 数据库,其目的是 Access。 现在计划将 SQLServer 服务器上的 student 数据库导出到 Access 中。如果 Access 目的 文件不存在,则需要先打开 Accesss,并建立一个空的 Access 数据库,为了保持一致,将 其取名为 student.mdb。 ⑴首先,打开企业管理器并展开 student 数据库,然后打开导入/导出向导,在如图 11-14

所示的“选择数据源”对话框中选择数据源为“用于SQLServer的MicrosoftOLEDB提供程 序”,数据库为“student'”,然后单击“下一步”。 (2)在如图11-15所示的“选择目的”对话框中选择目的下拉框为“MicrosoftAccess”, 并单击文件名旁边的省略号按钮,选择刚才在Access中建立的空数据库文件student.mdb, 然后单击“下一步”。 (3)在“选择源表和视图”对话框中选择所要导出的数据表或视图,如图11-16所示。 (4)其他步骤与导入操作基本一致,读者根据向导提示一步步就可完成整个将数据库导出 到Access的操作。 (⑤)最后可以打开student.mdb文件查看导出的数据。如图11-17所示。 图11-17 Access中查看导出的数据 11.3.2导出数据至文本文件 导出数据至文本文件的过程与将文本文件的数据导入数据库的过程一样,不同的是导入 /导出的源和目的不同。将数据库导出到文本文件,其数据源是SQLServer数据库,其目的 是文本文件。 现在计划将SQLServer服务器上的student数据库中的数据表lesson info导出到文本 文件中。如果目的文件不存在,则需要先创建一个空的文本文件,为了保持一致,将其取名 为lesson info.txta (1)首先,打开企业管理器并展开student数据库,然后打开导入/导出向导,在如图11-18 所示的“选择数据源”对话框中选择数据源为“用于SQLServer的MicrosoftOLEDB提供程 序”,数据库为“student'”,然后单击“下一步”。 (2)在如图11-19所示的“选择目的”对话框中选择目的下拉框为“文本文件”,并单击 文件名旁边的省略号按钮,选择刚才建立的空文本文件student.txt,然后单击“下一步”。 (3)在“目的文件格式”对话框中选择所要导出的数据表或视图,如图11-20所示。 (4)其他步骤与导入操作基本一致,读者可以根据向导提示一步步就可完成整个将数据库 导出到文本文件的操作。 (5)最后可以打开lesson_info.txt文件查看导出的数据。如图11-21所示。 图11-22DTS设计器的用户界面 图11-23连接属性 11.4使用DTS设计器 DTS设计器允许以图形化的方式创建数据源和数据目的的连接、配置DTS任务、执行DTS
所示的“选择数据源”对话框中选择数据源为“用于 SQLServer 的 MicrosoftOLEDB 提供程 序”,数据库为“student”,然后单击“下一步”。 ⑵在如图 11-15 所示的“选择目的”对话框中选择目的下拉框为“MicrosoftAccess”, 并单击文件名旁边的省略号按钮,选择刚才在 Access 中建立的空数据库文件 student.mdb, 然后单击“下一步”。 ⑶在“选择源表和视图”对话框中选择所要导出的数据表或视图,如图 11-16 所示。 ⑷其他步骤与导入操作基本一致,读者根据向导提示一步步就可完成整个将数据库导出 到 Access 的操作。 ⑸最后可以打开 student.mdb 文件查看导出的数据。如图 11-17 所示。 图 11-17Access 中查看导出的数据 11.3.2 导出数据至文本文件 导出数据至文本文件的过程与将文本文件的数据导入数据库的过程一样,不同的是导入 /导出的源和目的不同。将数据库导出到文本文件,其数据源是 SQLServer 数据库,其目的 是文本文件。 现在计划将SQLServer服务器上的student数据库中的数据表lesson_info导出到文本 文件中。如果目的文件不存在,则需要先创建一个空的文本文件,为了保持一致,将其取名 为 lesson_info.txt。 ⑴首先,打开企业管理器并展开 student 数据库,然后打开导入/导出向导,在如图 11-18 所示的“选择数据源”对话框中选择数据源为“用于 SQLServer 的 MicrosoftOLEDB 提供程 序”,数据库为“student”,然后单击“下一步”。 ⑵在如图 11-19 所示的“选择目的”对话框中选择目的下拉框为“文本文件”,并单击 文件名旁边的省略号按钮,选择刚才建立的空文本文件 student.txt,然后单击“下一步”。 ⑶在“目的文件格式”对话框中选择所要导出的数据表或视图,如图 11-20 所示。 ⑷其他步骤与导入操作基本一致,读者可以根据向导提示一步步就可完成整个将数据库 导出到文本文件的操作。 ⑸最后可以打开 lesson_info.txt 文件查看导出的数据。如图 11-21 所示。 图 11-22DTS 设计器的用户界面 图 11-23 连接属性 11.4 使用 DTS 设计器 DTS 设计器允许以图形化的方式创建数据源和数据目的的连接、配置 DTS 任务、执行 DTS

转换和指定优先约束等。可以用拖放方式来完成对象的设置,然后在设计区中创建DTS包。 (1)打开企业管理器,右击左边控制台树中的“数据转换服务”,然后单击“新建包”。系 统出现如图11-22所示的界面。图11-22显示了DTS设计器的用户界面。它的左边工具栏的 连接部分提供了一些可用的连接数据源,下面的任务部分提供了DTS设计器能提供数据转换 任务等。可以将左边的图标拖放到右边的设计区中以图形化的方式来创建新的DTS包和执行 数据转换任务。 (2)使用DTS设计器来创建DTS包时,第一步时选择数据源。可以将数据源对象从“连接” 工具栏中拖放到设计区中,也可以从“连接”菜单中选择数据源。一旦拖放成功,系统弹出 “连接属性”对话框,在此可以配置数据源。如图11-23所示。 (3)接着,以同样的方式来配置数据目的,如图11-24所示。 图11-24配置数据源和数据目的 图11-25转换数据任务 图11-26转换数据任务属性源标签页 (4)接着,需要使用“任务”菜单或者“任务”工具栏来确定需要生成的任务。若选择了 “转换数据任务”,并分别单击数据源和数据目的,将会显示从数据源指向数据目的的深灰 色箭头。如图11-25所示。 (⑤)双击数据源和数据目的之间的深灰色箭头,就可以打开该任务的对话框,并进行数据 转换任务的配置,如图11-26所示。在图11-26所示的“源”标签页中,若数据源为数据库, 则可以提供选择指定表、视图或使用Transact--SQL查询,过滤要传输的数据。“目的”标签 页中,可以定义要导入数据的有关信息(如定义列),如数据目的是数据库,也可以新建表, 或选择现有表格进行导入。 “转换”标签页中,可以配置自定义转换。默认情况下,源列将不加修改地复制到目的 列。如果需要在数据源和数据目的之间修改列数据,在“名称”下拉列表中选中要修改地列。 若单击“新建”按钮,可以在“创建新转换”对话框可用转换列表中,选择想要地转换类型。 DTS设计器可以在异构数据环境中转换数据和定义复杂的工作流程,包括定义一个或者 多个数据传输步骤以及这些步骤的执行顺序。数据传输步骤是一个工作单元,它可以是执行 一条Transact--SQL语句、执行脚本命令、移动和转换异构环境中的数据、调用外部程序、 检索和执行其他DTS包等。这些步骤可以通过三种方式来执行:优先级约束、条件判断约束 和优先权约束。使用DTS设计器可以在不同的平台上的SQLServer服务器之间移动数据结构、 对象和数据
转换和指定优先约束等。可以用拖放方式来完成对象的设置,然后在设计区中创建 DTS 包。 ⑴打开企业管理器,右击左边控制台树中的“数据转换服务”,然后单击“新建包”。系 统出现如图 11-22 所示的界面。图 11-22 显示了 DTS 设计器的用户界面。它的左边工具栏的 连接部分提供了一些可用的连接数据源,下面的任务部分提供了 DTS 设计器能提供数据转换 任务等。可以将左边的图标拖放到右边的设计区中以图形化的方式来创建新的 DTS 包和执行 数据转换任务。 ⑵使用 DTS 设计器来创建 DTS 包时,第一步时选择数据源。可以将数据源对象从“连接” 工具栏中拖放到设计区中,也可以从“连接”菜单中选择数据源。一旦拖放成功,系统弹出 “连接属性”对话框,在此可以配置数据源。如图 11-23 所示。 ⑶接着,以同样的方式来配置数据目的,如图 11-24 所示。 图 11-24 配置数据源和数据目的 图 11-25 转换数据任务 图 11-26 转换数据任务属性源标签页 ⑷接着,需要使用“任务”菜单或者“任务”工具栏来确定需要生成的任务。若选择了 “转换数据任务”,并分别单击数据源和数据目的,将会显示从数据源指向数据目的的深灰 色箭头。如图 11-25 所示。 ⑸双击数据源和数据目的之间的深灰色箭头,就可以打开该任务的对话框,并进行数据 转换任务的配置,如图 11-26 所示。在图 11-26 所示的“源”标签页中,若数据源为数据库, 则可以提供选择指定表、视图或使用 Transact-SQL 查询,过滤要传输的数据。“目的”标签 页中,可以定义要导入数据的有关信息(如定义列),如数据目的是数据库,也可以新建表, 或选择现有表格进行导入。 “转换”标签页中,可以配置自定义转换。默认情况下,源列将不加修改地复制到目的 列。如果需要在数据源和数据目的之间修改列数据,在“名称”下拉列表中选中要修改地列。 若单击“新建”按钮,可以在“创建新转换”对话框可用转换列表中,选择想要地转换类型。 DTS 设计器可以在异构数据环境中转换数据和定义复杂的工作流程,包括定义一个或者 多个数据传输步骤以及这些步骤的执行顺序。数据传输步骤是一个工作单元,它可以是执行 一条 Transact-SQL 语句、执行脚本命令、移动和转换异构环境中的数据、调用外部程序、 检索和执行其他 DTS 包等。这些步骤可以通过三种方式来执行:优先级约束、条件判断约束 和优先权约束。使用DTS设计器可以在不同的平台上的SQLServer服务器之间移动数据结构、 对象和数据

11.5使用bcp和BULKINSERT 11.5.1批拷贝程序 批拷贝程序(bcp)是一个从SQLServer导入/导出数据的命令行形式的程序。它可以在运 行bcp的机器上把表或视图中的数据导出到一个文件中。该文件可以被发送到另一台计算机 或另一个位置上,再导入到另一台计算机上的SQLServer数据库中。 1.命令格式 bcp{[[database_name.[owner].]{table_namelview_name}|"query"} (in|out|queryout |format}data_file [-mmax_errors][-fformat_file][-eerr_file] [-Ffirst_row][-Llast_row][-bbatch_size] [-n][-c][-w][-N][-V(60l65l7o)][-6] [-q][-Ccode_page][-tfield_term][-rrow_term] [-iinput_file][-ooutput_file][-apacket_size] [-Sserver_name[\instance_name]][-Ulogin_id][-Ppassword] [-T][-v][-R][-k][-E][-h"hint[,..n]"] 2.选项注释 选项 描述 table n 导入或导出的表的名称。 ame view na 导入或导出的视图的名称。 me 从不同表中指定行和列的SQL查询。如果指定此选项,同时也必须 query" 指定queryout选项。 in 将文件内容拷贝到指定的表或视图。 out 将指定的表或视图内容拷贝到文件。 queryou 与$QL查询一起使用,用于告诉系统支持查询的运行,并将结果返 回到指定的文件。 生成基于表和视图、指定的代码页、或选定定界符的格式文件。如 format 果你指定此选项,你同时也必须指定-「选项
11.5 使用 bcp 和 BULKINSERT 11.5.1 批拷贝程序 批拷贝程序(bcp)是一个从 SQLServer 导入/导出数据的命令行形式的程序。它可以在运 行 bcp 的机器上把表或视图中的数据导出到一个文件中。该文件可以被发送到另一台计算机 或另一个位置上,再导入到另一台计算机上的 SQLServer 数据库中。 1.命令格式 bcp{[[database_name.][owner].]{table_name|view_name}|"query"} {in|out|queryout|format}data_file [-mmax_errors][-fformat_file][-eerr_file] [-Ffirst_row][-Llast_row][-bbatch_size] [-n][-c][-w][-N][-V(60|65|70)][-6] [-q][-Ccode_page][-tfield_term][-rrow_term] [-iinput_file][-ooutput_file][-apacket_size] [-Sserver_name[\instance_name]][-Ulogin_id][-Ppassword] [-T][-v][-R][-k][-E][-h"hint[,...n]"] 2.选项注释 选项 描述 table_n ame 导入或导出的表的名称。 view_na me 导入或导出的视图的名称。 "query" 从不同表中指定行和列的 SQL 查询。如果指定此选项,同时也必须 指定 queryout 选项。 in 将文件内容拷贝到指定的表或视图。 out 将指定的表或视图内容拷贝到文件。 queryou t 与 SQL 查询一起使用,用于告诉系统支持查询的运行,并将结果返 回到指定的文件。 format 生成基于表和视图、指定的代码页、或选定定界符的格式文件。如 果你指定此选项,你同时也必须指定-f 选项

data fi 导入或导出数据的文件。 le -mmax e 指定在全部操作被放弃之前允许出现的错误次数。任何向数据库拷 rrors 贝失败的行都会被记作是一次错误。缺省值为10。 -fforma 指定格式文件的位置,用该文件来决定导入或导出数据将怎样格式 t_file 化。创建格式文件并不是必须的。 -eerr_f 指定存储BCP过程中出错信息的文件的位置。假如没有指定它,将 ile 在屏幕上显示出错信息。 -Ffirst 指定被拷贝数据的首行。缺省值为1,指明拷贝到服务器上的数据 row 文件的首行。 -Llast_ 指定被拷贝数据的末行。缺省值为0,指明所有行数据将被处理。 row 指定每批拷贝的行数。每批都作为单独的批拷贝到SQLServer。不 -bbatch 要和-h“ROWS PER BATCH=-bb”选项一起使用本选项。如果不指定批, size 整个过程将被作为一个单独的事务处理。假如任何情况导致失败, 将取消所做的一切。 指定使用本地数据库格式的批拷贝。如果指定该选项SQLServer将 不提供任何列信息。 指定使用字符格式的批拷贝。SQLServer使用字符数据类型作为存 c 储类型。\t(Tab键)作为字段定界符,\n(新行)作为行终止符。 指定使用统一字符编码标准字符集进行的BCP操作。该选项不提示 -w 字段类型,它使用nchart数据类型作为存储类型。\t(Tab键)作为 字段定界符,n(新行)作为行终止符。 指定使用本地数据库格式的批拷贝。它同允许使用统一字符编码标 冰 准字符类型的-n选项不同。该选项用于指定用QL6.5的数据类型 去执行BCP操作,但必须将-n或-c选项与本选项一起使用。 告诉SQL应该使用引号括起来的标识符。假如表或视图名包含了非 -q ANSI字符集的字符,必须把它们放在引号中。 -Ccode_ 指定将要用于数据文件的代码页
data_fi le 导入或导出数据的文件。 -mmax_e rrors 指定在全部操作被放弃之前允许出现的错误次数。任何向数据库拷 贝失败的行都会被记作是一次错误。缺省值为 10。 -fforma t_file 指定格式文件的位置,用该文件来决定导入或导出数据将怎样格式 化。创建格式文件并不是必须的。 -eerr_f ile 指定存储 BCP 过程中出错信息的文件的位置。假如没有指定它,将 在屏幕上显示出错信息。 -Ffirst _row 指定被拷贝数据的首行。缺省值为 1,指明拷贝到服务器上的数据 文件的首行。 -Llast_ row 指定被拷贝数据的末行。缺省值为 0,指明所有行数据将被处理。 -bbatch _size 指定每批拷贝的行数。每批都作为单独的批拷贝到 SQLServer。不 要和-h“ROWS_PER_BATCH=bb”选项一起使用本选项。如果不指定批, 整个过程将被作为一个单独的事务处理。假如任何情况导致失败, 将取消所做的一切。 -n 指定使用本地数据库格式的批拷贝。如果指定该选项 SQLServer 将 不提供任何列信息。 -c 指定使用字符格式的批拷贝。SQLServer 使用字符数据类型作为存 储类型。\t(Tab 键)作为字段定界符,\n(新行)作为行终止符。 -w 指定使用统一字符编码标准字符集进行的 BCP 操作。该选项不提示 字段类型,它使用 nchart 数据类型作为存储类型。\t(Tab 键)作为 字段定界符,\n(新行)作为行终止符。 -N 指定使用本地数据库格式的批拷贝。它同允许使用统一字符编码标 准字符类型的-n 选项不同。该选项用于指定用 SQL6.5 的数据类型 去执行 BCP 操作,但必须将-n 或-c 选项与本选项一起使用。 -q 告诉 SQL 应该使用引号括起来的标识符。假如表或视图名包含了非 ANSI 字符集的字符,必须把它们放在引号中。 -Ccode_ 指定将要用于数据文件的代码页

page -tfield 指定要用于数据文件的字段终止符。此选项的缺省值是/九,它产生 term 个制表位。 -rrow t 指定要用于数据文件的行终止符。此选项的缺省值是/,它产生 erm 个新行。 -iinput 指定一个文件,当在交互模式下运行BCP时,该文件包含了必须提 file 供的应答。 -ooutpu 指定一个文件,接收从BCP得到的输出。如果未指定该选项,这个 t file 信息会发送到屏幕上。 指定SQLServer将通过网络发送的字节数。在大型BCP操作中,加 -apacke 大包可增加处理的性能。有效字节为512字节到65536字节。 t size WindowsNT和SQLSever都将缺省值定为4096字节。 -Sserve 指定当执行BCP操作时将连接的服务器的名称。 r name -Ulogin 指定登录的服务器用的登录ID。 id -Ppassw 指定与登录ID相关的口令。 ord -T 告诉BCP将使用一个信任连接与服务器连接。 -v 让SQLServer返回BCP工具的版本和版权信息。 指定使用客户机本地的信息将货币、日期和时间数据拷贝到 及 SQLServer上。 指定在数据拷贝到表期间,任何空列应保持NULL值,而不是用这些 -k 列的缺省值。如果不指定该参数值,SQLServer将把缺省值放入该 列。 为当前文件中任何相同的列指定值。如果-E未指定,将忽略相同的 次 值并创建新值。 -h"hint 指定在向表或视图进行批拷贝操作时用到的提示。 [,.n]
page -tfield _term 指定要用于数据文件的字段终止符。此选项的缺省值是/t,它产生一 个制表位。 -rrow_t erm 指定要用于数据文件的行终止符。此选项的缺省值是/n,它产生一 个新行。 -iinput _file 指定一个文件,当在交互模式下运行 BCP 时,该文件包含了必须提 供的应答。 -ooutpu t_file 指定一个文件,接收从 BCP 得到的输出。如果未指定该选项,这个 信息会发送到屏幕上。 -apacke t_size 指定 SQLServer 将通过网络发送的字节数。在大型 BCP 操作中,加 大包可增加处理的性能。有效字节为 512 字节到 65536 字节。 WindowsNT 和 SQLSever 都将缺省值定为 4096 字节。 -Sserve r_name 指定当执行 BCP 操作时将连接的服务器的名称。 -Ulogin _id 指定登录的服务器用的登录 ID。 -Ppassw ord 指定与登录 ID 相关的口令。 -T 告诉 BCP 将使用一个信任连接与服务器连接。 -v 让 SQLServer 返回 BCP 工具的版本和版权信息。 -R 指定使用客户机本地的信息将货币、日期和时间数据拷贝到 SQLServer 上。 -k 指定在数据拷贝到表期间,任何空列应保持 NULL 值,而不是用这些 列的缺省值。如果不指定该参数值,SQLServer 将把缺省值放入该 列。 -E 为当前文件中任何相同的列指定值。如果-E 未指定,将忽略相同的 值并创建新值。 -h"hint [,...n] 指定在向表或视图进行批拷贝操作时用到的提示

毋庸置疑,尽管使用BCP时有大量的选项可用,但是,实际应用中只会用到它们中的很 少部分。例如,在computer服务器上使用bcp从student数据库的stud info表中导出所 有行。 C:\>bcpstudent.dbo.stud infooutstud info.txt -c-Scomputer-Usa-P123456 3.举例说明 利用数据库脚本和bcp命令将student数据库复制到其他机器上。 (I)将student数据库生成SQL脚本 ①展开服务器组,然后展开服务器。 ②右击student数据库,然后单击“所有任务”下的“生成SQL脚本”,出现如图11-27 所示的对话框。 ③单击“全部显示”,再选中“编写全部对象脚本”。设置后如图11-28所示。 ④单击“选项”标签页,如图11-29所示,选中“编写数据库脚本”、“编写触发器脚本”、 “编写主键、默认值和检查约束脚本”。 ⑤单击“确定”按钮,出现“另存为”对话框,表示将脚本文件保存在何处,这里将其 保存在C根目录下,文件名为xsg1.sql。设定好路径和文件名后,单击“保存”按钮。 ⑥成功保存后,出现“编写脚本”对话框,单击“确定”按钮。 图11-27生成SQL脚本-常规1 图11-28生成SQL脚本-常规 图11-29生成SQL脚本-选项 (2)使用bcp从student数据库导出数据 在MS-DOS命令运行如下命令: c: cd\ bcpstudent..stud_infooutstud_info.txt-n-Usa-P123456 bcpstudent..teacher_infooutteacher_info.txt-n-Usa-P123456 bcpstudent..stud_gradeoutstud_grade.txt-n-Usa-P123456 bcpstudent..lesson_infooutlesson_info.txt-n-Usa-P123456 bcpstudent..teach_scheduleoutteach_schedule.txt-n-Usa-P123456
" 毋庸置疑,尽管使用 BCP 时有大量的选项可用,但是,实际应用中只会用到它们中的很 少部分。例如,在 computer 服务器上使用 bcp 从 student 数据库的 stud_info 表中导出所 有行。 C:\>bcpstudent.dbo.stud_infooutstud_info.txt–c-Scomputer-Usa-P123456 3.举例说明 利用数据库脚本和 bcp 命令将 student 数据库复制到其他机器上。 ⑴将 student 数据库生成 SQL 脚本 ①展开服务器组,然后展开服务器。 ②右击 student 数据库,然后单击“所有任务”下的“生成 SQL 脚本”,出现如图 11-27 所示的对话框。 ③单击“全部显示”,再选中“编写全部对象脚本”。设置后如图 11-28 所示。 ④单击“选项”标签页,如图 11-29 所示,选中“编写数据库脚本”、“编写触发器脚本”、 “编写主键、默认值和检查约束脚本”。 ⑤单击“确定”按钮,出现“另存为”对话框,表示将脚本文件保存在何处,这里将其 保存在 C 根目录下,文件名为 xsgl.sql。设定好路径和文件名后,单击“保存”按钮。 ⑥成功保存后,出现“编写脚本”对话框,单击“确定”按钮。 图 11-27 生成 SQL 脚本-常规 1 图 11-28 生成 SQL 脚本-常规 图 11-29 生成 SQL 脚本-选项 ⑵使用 bcp 从 student 数据库导出数据 在 MS-DOS 命令运行如下命令: c: cd\ bcpstudent..stud_infooutstud_info.txt–n-Usa-P123456 bcpstudent..teacher_infooutteacher_info.txt–n-Usa-P123456 bcpstudent..stud_gradeoutstud_grade.txt–n-Usa-P123456 bcpstudent..lesson_infooutlesson_info.txt–n-Usa-P123456 bcpstudent..teach_scheduleoutteach_schedule.txt–n-Usa-P123456

bcpstudent..dept codeoutdept code.txt -n-Usa-P123456 bcpstudent..specialty_codeoutspecialty_code.txt-n-Usa-P123456 bcpstudent..staffroom_infooutstaffroom_info.txt-n-Usa-P123456 bcpstudent..classroom infooutclassroom info.txt -n-Usa-P123456 可以将上述命令以批处理文件(扩展名为.bat)形式保存,以后每次运行时直接运行该批 处理文件即可。 (3)在其他计算机上生成student数据库 因为选择同一台计算机操作,所以采取模拟的形式。现在原计算机上删除student数据 库,再重新生成。 (4)利用生成的SQL脚本创建数据库 在查询分析器的主菜单中选择“文件”下的“打开”,出现“打开查询文件”对话框, 找到刚才生成的数据库脚本文件xsgl.sq1,单击“打开”按钮:查询分析器出现数据库脚 本文件,单击工具栏的“运行”按钮即可。 (⑤)使用bcp将导出数据导入至student数据库 在MS-DOS命令运行如下命令: c cd\ bcpstudent..stud_infoinstud_info.txt-n-Usa-P123456 bcpstudent..teacher_infointeacher_info.txt-n-Usa-P123456 bcpstudent..stud_gradeinstud_grade.txt-n-Usa-P123456 bcpstudent..lesson_infoinlesson_info.txt-n-Usa-P123456 bcpstudent..teach scheduleinteach schedule.txt -n-Usa-P123456 bcpstudent..dept_codeindept_code.txt-n-Usa-P123456 bcpstudent..specialty_codeinspecialty_code.txt-n-Usa-P123456 bcpstudent..staffroom_infoinstaffroom_info.txt-n-Usa-P123456 bcpstudent..classroom_infoinclassroom_info.txt -n-Usa-P123456 同样,可以将上述命令以批处理文件(扩展名为.bat)形式保存,以后每次运行时直接运 行该批处理文件即可。 11.5.2BULKINSERT BULKINSERT命令是一个用于处理数据迁移的命令,它用于将数据插入数据库中
bcpstudent..dept_codeoutdept_code.txt–n-Usa-P123456 bcpstudent..specialty_codeoutspecialty_code.txt–n-Usa-P123456 bcpstudent..staffroom_infooutstaffroom_info.txt–n-Usa-P123456 bcpstudent..classroom_infooutclassroom_info.txt–n-Usa-P123456 可以将上述命令以批处理文件(扩展名为.bat)形式保存,以后每次运行时直接运行该批 处理文件即可。 ⑶在其他计算机上生成 student 数据库 因为选择同一台计算机操作,所以采取模拟的形式。现在原计算机上删除 student 数据 库,再重新生成。 ⑷利用生成的 SQL 脚本创建数据库 在查询分析器的主菜单中选择“文件”下的“打开”,出现“打开查询文件”对话框, 找到刚才生成的数据库脚本文件 xsgl.sql,单击“打开”按钮;查询分析器出现数据库脚 本文件,单击工具栏的“运行”按钮即可。 ⑸使用 bcp 将导出数据导入至 student 数据库 在 MS-DOS 命令运行如下命令: c: cd\ bcpstudent..stud_infoinstud_info.txt–n-Usa-P123456 bcpstudent..teacher_infointeacher_info.txt–n-Usa-P123456 bcpstudent..stud_gradeinstud_grade.txt–n-Usa-P123456 bcpstudent..lesson_infoinlesson_info.txt–n-Usa-P123456 bcpstudent..teach_scheduleinteach_schedule.txt–n-Usa-P123456 bcpstudent..dept_codeindept_code.txt–n-Usa-P123456 bcpstudent..specialty_codeinspecialty_code.txt–n-Usa-P123456 bcpstudent..staffroom_infoinstaffroom_info.txt–n-Usa-P123456 bcpstudent..classroom_infoinclassroom_info.txt–n-Usa-P123456 同样,可以将上述命令以批处理文件(扩展名为.bat)形式保存,以后每次运行时直接运 行该批处理文件即可。 11.5.2BULKINSERT BULKINSERT 命令是一个用于处理数据迁移的命令,它用于将数据插入数据库中