SQL存储过程测试--使用BCP工具导入测试用例数据

问题

如何使用BCP从一个文本文件把测试用例数据导入到SQL表

设计

创建一个BCP格式的文件用于把想导入的文本文件信息映射到目标SQL表,然后把上述格式的文件作为参数传给命令行工具bcp.exe。

方案

假设SQL表定义如下:

create table tblTestCases

(

caseID char(4) primary key,

input char(3) not null,

expected int not null

)

还有一个包含测试用例数据的文本文件叫作newData.dat

0020,e13,66

0021,e14,77

0022,e15,88

0023,e16,99

0024,e17,66

创建一个叫newData.fmt的BCP格式的文件,这个文件采用制表符(tab)作为分隔符。

8.0

3

1      SQLCHAR       0      4      ","      1      caseID      SQL_Latin1_General_CP1_CI_AS

2      SQLCHAR       0      3      ","      2      input      SQL_Latin1_General_CP1_CI_AS

3      SQLCHAR       0      2      "/r/n"      3      excepted      SQL_Latin1_General_CP1_CI_AS

用于导入测试用例数据的命令如下:

C:/>bcp.exe dbTestCasesAndResults..tblTestCases in newData.dat -fnewData.fmt -S. -UtestLogin -Psecret

此命令的意思是针对数据库dbTestCasesAndResults里的表tblTestCases运行BCP程序,把newData.dat里的数据按照newData.fmt所定义的格式映射导入到上述表中。这些命令是针对本地的SQLServer所执行的,连连数据库的时候使用叫作testLogin的SQL登录账号,SQL密码是secret。

使用这种技术,关键是要理解bcp.exe程序所使用的格式文件的结构。这个文件的第1行只有一个单独的值用来表示sql server的版本号。SQL Server 7.0的版本号是7.0,SQL Server 2000的版本号是8.0,SQL Server2005的版本号是9.0。格式文件的第二行是一个整数值,它表示格式文件中映射实际开始的行号。第3行以后的的内容都是映射信息。每个映射行(mapping line)有8个列。前5个列代表与输入数据(本例中指文件文件)有关信息。后3个列代表要导入的目标信息(本例中指SQL表)。第一列其实就是从1开始的系列数字。这些值总是1、2、3等,依此类推。(这些数字以及其他一些BCP格式文件里的信息看上去是没有必要的,但是在其他一些情况下确实会用到它们。)映射行里的第二列是要导入的数据类型。当从文本文件导入数据的时候,不管这个值代表的是什么,它的类型总是SQLCHAR。第三例是前缀长度(prefix length)。这是当进行从SQL到SQL数据拷贝时,BCP用于优化的一个相当复杂的参数。幸运的是,当把文本数据导入SQL的时候,前缀总长度值总是0.第四列表示输入字段字符的最大长度。第五列表示字段分隔会,在此用逗号来分割所有的字段。比如说,如果输入数据文件的字段是用制表符来分割,应该在映射文件中指定为/t。第六列到第八列指代的是目标SQL表,而不是输入文件。第六列和第七列分别指SQL表里相应列的顺序和名称。映射行第八列用来指定要使用的SQL排序规则。

注解

使用BCP工具可以高效地以自动化的方式把测试用例数据从文本文件引入到SQL测试用例表中。特别注意,测试用例的数据文件在数据块的最后一行之后一定不能再有换行符。如果有换行符,就会被BCP解释成一个新的空行。而用于映射的格式文件在最后一行之后一定要有一个换行符。如果没有这个换行符,BCP就不会读入映射文件的最后一行。

即使文本文件的数据格式与SQL表的结果不完全吻合,也可以通过BCP工具从文本文件导入数据。换句话说,即使文本文件的数据与相应的SQL列顺序不一致或者文本文件的数据有多作的字段,仍然可以使用BCP工具来导入数据,例如:

0020,66,useless,e13

0021,77,no-need,e14

0022,88,go-away,e15

0023,99,drop-it,e16

这个文件有些额外的信息并不想将其导入,而且各个字段(caseID,expected value,unneeded data,input value)的顺序也和SQL列(caseID,input,expected)的顺序不一致。针对这个文本文件的BCP文件的格式如下:

8.0

4

1      SQLCHAR       0      4      ","      1      caseID      SQL_Latin1_General_CP1_CI_AS

2      SQLCHAR       0      2      ","      3      excepted      SQL_Latin1_General_CP1_CI_AS

3      SQLCHAR       0      7      ","      0      junk      SQL_Latin1_General_CP1_CI_AS

4      SQLCHAR       0      3      "/r/n"      2      input      SQL_Latin1_General_CP1_CI_AS

映射文件的第6列通过设置该列的值来指定文本文件中相应数据的插入顺序,如果该列的值设为0,则在插入数据的时候忽略这个列。

因为bcp.exe是一个命令行程序,所以可以手动运行它也可以把想要执行的命令放到一个简单的BAT文件,然后在自己的程序里调用这个BAT文件。如果想在SQL环境下使用BCP,可以通过BULK INSERT 命令来完成。

bulk insert dbTestCasesAndResults..tblTestCases

from 'C:/somewhere/newData.dat'

with (formatfile = 'C:/somewhere/newData.fmt')

问题

如何使用BCP从一个文本文件把测试用例数据导入到SQL表

设计

创建一个BCP格式的文件用于把想导入的文本文件信息映射到目标SQL表,然后把上述格式的文件作为参数传给命令行工具bcp.exe。

方案

假设SQL表定义如下:

create table tblTestCases

(

caseID char(4) primary key,

input char(3) not null,

expected int not null

)

还有一个包含测试用例数据的文本文件叫作newData.dat

0020,e13,66

0021,e14,77

0022,e15,88

0023,e16,99

0024,e17,66

创建一个叫newData.fmt的BCP格式的文件,这个文件采用制表符(tab)作为分隔符。

8.0

3

1      SQLCHAR       0      4      ","      1      caseID      SQL_Latin1_General_CP1_CI_AS

2      SQLCHAR       0      3      ","      2      input      SQL_Latin1_General_CP1_CI_AS

3      SQLCHAR       0      2      "/r/n"      3      excepted      SQL_Latin1_General_CP1_CI_AS

用于导入测试用例数据的命令如下:

C:/>bcp.exe dbTestCasesAndResults..tblTestCases in newData.dat -fnewData.fmt -S. -UtestLogin -Psecret

此命令的意思是针对数据库dbTestCasesAndResults里的表tblTestCases运行BCP程序,把newData.dat里的数据按照newData.fmt所定义的格式映射导入到上述表中。这些命令是针对本地的SQLServer所执行的,连连数据库的时候使用叫作testLogin的SQL登录账号,SQL密码是secret。

使用这种技术,关键是要理解bcp.exe程序所使用的格式文件的结构。这个文件的第1行只有一个单独的值用来表示sql server的版本号。SQL Server 7.0的版本号是7.0,SQL Server 2000的版本号是8.0,SQL Server2005的版本号是9.0。格式文件的第二行是一个整数值,它表示格式文件中映射实际开始的行号。第3行以后的的内容都是映射信息。每个映射行(mapping line)有8个列。前5个列代表与输入数据(本例中指文件文件)有关信息。后3个列代表要导入的目标信息(本例中指SQL表)。第一列其实就是从1开始的系列数字。这些值总是1、2、3等,依此类推。(这些数字以及其他一些BCP格式文件里的信息看上去是没有必要的,但是在其他一些情况下确实会用到它们。)映射行里的第二列是要导入的数据类型。当从文本文件导入数据的时候,不管这个值代表的是什么,它的类型总是SQLCHAR。第三例是前缀长度(prefix length)。这是当进行从SQL到SQL数据拷贝时,BCP用于优化的一个相当复杂的参数。幸运的是,当把文本数据导入SQL的时候,前缀总长度值总是0.第四列表示输入字段字符的最大长度。第五列表示字段分隔会,在此用逗号来分割所有的字段。比如说,如果输入数据文件的字段是用制表符来分割,应该在映射文件中指定为/t。第六列到第八列指代的是目标SQL表,而不是输入文件。第六列和第七列分别指SQL表里相应列的顺序和名称。映射行第八列用来指定要使用的SQL排序规则。

注解

使用BCP工具可以高效地以自动化的方式把测试用例数据从文本文件引入到SQL测试用例表中。特别注意,测试用例的数据文件在数据块的最后一行之后一定不能再有换行符。如果有换行符,就会被BCP解释成一个新的空行。而用于映射的格式文件在最后一行之后一定要有一个换行符。如果没有这个换行符,BCP就不会读入映射文件的最后一行。

即使文本文件的数据格式与SQL表的结果不完全吻合,也可以通过BCP工具从文本文件导入数据。换句话说,即使文本文件的数据与相应的SQL列顺序不一致或者文本文件的数据有多作的字段,仍然可以使用BCP工具来导入数据,例如:

0020,66,useless,e13

0021,77,no-need,e14

0022,88,go-away,e15

0023,99,drop-it,e16

这个文件有些额外的信息并不想将其导入,而且各个字段(caseID,expected value,unneeded data,input value)的顺序也和SQL列(caseID,input,expected)的顺序不一致。针对这个文本文件的BCP文件的格式如下:

8.0

4

1      SQLCHAR       0      4      ","      1      caseID      SQL_Latin1_General_CP1_CI_AS

2      SQLCHAR       0      2      ","      3      excepted      SQL_Latin1_General_CP1_CI_AS

3      SQLCHAR       0      7      ","      0      junk      SQL_Latin1_General_CP1_CI_AS

4      SQLCHAR       0      3      "/r/n"      2      input      SQL_Latin1_General_CP1_CI_AS

映射文件的第6列通过设置该列的值来指定文本文件中相应数据的插入顺序,如果该列的值设为0,则在插入数据的时候忽略这个列。

因为bcp.exe是一个命令行程序,所以可以手动运行它也可以把想要执行的命令放到一个简单的BAT文件,然后在自己的程序里调用这个BAT文件。如果想在SQL环境下使用BCP,可以通过BULK INSERT 命令来完成。

bulk insert dbTestCasesAndResults..tblTestCases

from 'C:/somewhere/newData.dat'

with (formatfile = 'C:/somewhere/newData.fmt')


相关文章

  • 数据库设计规范
  • 修订历史记录 发放范围:产品研发部 1. 概述 2. 数据库设计的基本原则 3. 数据库建模 3.1 数据分析 3.2 数据关系分析 3.3 数据量分析 3.4 扩展性分析 3.5 数据字典(参考) 3.5.1 数据项 3.5.2 数据结构 ...查看


  • 服务器存储系统工程师面试题目(含答案)
  • 服务器存储系统工程师面试题目 AIX 面试题: 1) 如何把JFS 转成JFS2 答:backup , recreate and restore 2) 系统升级的时候,升级失败,如何知道缺那个软件包没有安装. 答 instfix -ivk ...查看


  • 课程设计内容格式范例
  • HND项目班主任辅助管理信息系统 1绪 论 1.1系统开发背景 本设计题目是基于武汉理工大学国教育学院班主任的学生管理工作. 国际教育学院是由我校和国外几所高校联合办学.学生入学第一学年学习预科课程,是由我校开设的一些基础课,包括高等数学和 ...查看


  • 数据产品规格说明书
  • 数据管控产品规格说明书 第一章 引言 1.1 编写目的 本文档作为数据管控产品体系(元数据和数据质量管理)的产品方案说明书,介绍元数据和数据质量的解决方案. 1.2 项目背景 经过多年建设,企业一般已经初步建成了各类管理信息系统,虽然在运用 ...查看


  • 数据库原理实验报告(1)
  • 南 京 晓 庄 学 院 <数据库原理与应用> 课程实验报告 实验一 SQL Server 2005常用服务与实用工具实验 所在院(系): 信息工程学院 班级: 13软件工程转本1班 学号: 13131151 姓名: 薛伟 1. ...查看


  • 超市会员管理系统
  • 超市会员管理系统 摘要:随着我国经济的快速发展,市场机制不断完善,物质资料日益丰富,越来越多的商品从卖方市场转入买方市场,商业领域的竞争日益激烈.我国加入世贸组织后,外国的零售巨头不断进入中国市场,使得这个领域的竞争更加残酷. 为了应对激烈 ...查看


  • 饭店管理信息系统论文
  • 毕业设计(论文) 题 目: 饭店管理信息系统 学 院: ____________ 专 业: __________________ 学生姓名:班级/学号:__________________________ 指导老师/督导老师: _____ ...查看


  • sqlserver入门随堂笔记
  • sql server概述及应用 一.sql server常用工具介绍: 1. 企业管理器: * sql server大管家,针对于数据库的所有内容做控制管理 * 包括数据库建立,数据表的建立,数据添加删除修改查看等 * 数据库安全管理,数据 ...查看


  • 学生信息管理系统总体思路
  • 1.1 系统概述 本学生信息管理系统可以说是一个综合性的学校学生管理系统,这它集成了学生学籍管理系统.学生成绩管理系统.学生档案管理系统.学生缴费管理系统等多种功能.本系统主要用到的技术包括:MVC 三层架构开发模式, 这种设计模式把应用逻 ...查看


热门内容