欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQLServer导入导出excel及常见问题

程序员文章站 2022-06-15 20:38:13
...

前几天考试系统导入导出学生信息,初次接触导入导出,为sqlserver和excel的数据传递方法之简和 MS产品的高效兼容 所震惊,但也遇到各种各样问题,在此介绍SQLServer导入导出excel方法及遇到的问题。 SQLServer导出Excel 导出步骤想对较少,出现的问题也较少

前几天考试系统导入导出学生信息,初次接触导入导出,为sqlserver和excel的数据传递方法之简和MS产品的高效兼容所震惊,但也遇到各种各样问题,在此介绍SQLServer导入导出excel方法及遇到的问题。

SQLServer导出Excel

导出步骤想对较少,出现的问题也较少。

1、进入Excel---数据---自其它来源---来自SQLServer。如图:

SQLServer导入导出excel及常见问题

2、连接数据库:

SQLServer导入导出excel及常见问题

3、选择数据库和表---完成:

SQLServer导入导出excel及常见问题

4、选择插入位置---确定---显示导出结果:

SQLServer导入导出excel及常见问题SQLServer导入导出excel及常见问题

SQLServer导入excel

1、选择要导入的数据库---任务---导入数据,如图:

SQLServer导入导出excel及常见问题

2、选择excel数据源---浏览文件。注意如果excel中首行数据为字段,应勾选“首行包含列名称”。

SQLServer导入导出excel及常见问题

3、选择数据库---选择源表和原视图:

SQLServer导入导出excel及常见问题

注意,如果不选则目标,则会在数据库中自动生成同名的表,并把数据导入进去。

4、如不需保存SSIS包,直接点击完成即可。

不出错误到此以导入完毕,但是实际上并非如此,错误示例:

操作已停止...

- 正在初始化数据流任务 (成功)

- 正在初始化连接 (成功)

- 正在设置 SQL 命令 (成功)

- 正在设置源连接 (成功)

- 正在设置目标连接 (成功)

- 正在验证 (成功)

- 准备执行 (成功)

- 执行之前 (成功)

- 正在执行 (成功)

- 正在复制到 [dbo].[t_Student] (错误)
消息
错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“未指定的错误”。
 (SQL Server 导入和导出向导)
 
错误 0xc020901c: 数据流任务 1: 输入“Destination Input”(60) 上的 输入列“studentId”(127) 出错。返回的列状态是:“该值违反了该列的完整性约束。”。
 (SQL Server 导入和导出向导)
 
错误 0xc0209029: 数据流任务 1: SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“Destination Input”(60)”失败,错误代码为 0xC020907D,而且针对“输入“Destination Input”(60)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导)
 
错误 0xc0047022: 数据流任务 1: SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“Destination Input”(60)时,组件“目标 - t_Student”(47)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导)
 

- 执行之后 (成功)
消息
信息 0x402090df: 数据流任务 1: “组件“目标 - t_Student”(47)”中的数据插入操作的最终提交已开始。
 (SQL Server 导入和导出向导)
 
信息 0x402090e0: 数据流任务 1: “组件“目标 - t_Student”(47)”中的数据插入操作的最终提交已结束。
 (SQL Server 导入和导出向导)
 
信息 0x4004300b: 数据流任务 1: “组件“目标 - t_Student”(47)”已写入 0 行。
 (SQL Server 导入和导出向导)

 
就个人经验而言,一般提示最有用能直观展示非系统问题的是第二个错误提示,如上述:“错误 0xc020901c: 数据流任务 1: 输入“Destination Input”(60) 上的 输入列“studentId”(127) 出错。返回的列状态是:“该值违反了该列的完整性约束。”

常见问题:

1、外键约束,例如:已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“INSERT 语句与 FOREIGN KEY 约束"FK_t_Student_t_Classes"冲突。该冲突发生于数据库"CollegeSystemVBTest",表"dbo.t_Classes", column 'classId'。”一般外键约束禁止更新或插入会触发此问题,解决方法,详见我的博客《简简单单说外键和级联》。

2、列的完整性约束,例如:错误 0xc020901c: 数据流任务 1: 输入“Destination Input”(60) 上的 输入列“studentId”(127) 出错。返回的列状态是:“该值违反了该列的完整性约束。”一般主键约束会触发此问题,例如导入的excel中主键重复。想想当时因为是由2000多行学生信息,转专业的学生、源数据错误都会产生重复行,当时想的办法是先导入Access,查找重复列然后再删除,虽能解决,但是效率太低,更好的解决方法,excel自带去除重复列功能,进入excel---数据---删除重复项。

3、映射列多余,SQLserver虽然可以智能识别映射列,但是成功率并非100%,所以可以在导入excel第三步骤中编辑映射列或是选择生成映射列。

4、数据长度,这个问题也十分常见,excel单元格默认字符长度最大值为255,超过255即出错。

文尾

一般情况下,虽然有时候错误不是那么好理解和找到,但是只要认真观察,即可发现错误,否则即使小小的一个错误,也能耗上你半天。反思:仔细观察每个提示、有针对性的解决、多角度尝试、不要想着只要解决问题,同时要学习解决问题的这个过程。