我从SQL Server获得了一些Excel数据,但我更新了SQL Server的脚本,所以我需要再次将Excel导入SQL Server。我使用任务 - 导入数据。
有一些错误:
复制到[dbo]。[AA](错误)消息。错误0xc0202009:数据流 任务1:SSIS错误代码DTS_E_OLEDBERROR。 OLE DB错误 发生了。错误代码:0x80004005。 OLE DB记录可用。 来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005 说明:“日期格式无效”。 (SQL Server导入和导出 向导)
错误0xc020901c:数据流任务1:出现错误 目的地 - AA.Inputs [目的地输入] .Columns [时间]开启 目的地 - AA.Inputs [目的地输入]。列状态返回 是:“转换失败,因为数据值溢出了 指定的类型。“。(SQL Server导入和导出向导)
错误0xc0209029:数据流任务1:SSIS错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “目的地 - AA.Inputs [Destination Input]“失败,因为错误代码为0xC020907A 发生了,并且错误行处理“目的地 - AA.Inputs [Destination Input]“指定错误失败。错误 发生在指定组件的指定对象上。那里 可能是此前发布的错误消息,其中包含更多相关信息 失败。 (SQL Server导入和导出向导)
错误0xc0047022:数据流任务1:SSIS错误代码 DTS_E_PROCESSINPUTFAILED。组件上的ProcessInput方法 “Destination - AA”(107)失败,错误代码为0xC0209029 处理输入“目的地输入”(120)。确定的组件 从ProcessInput方法返回错误。错误是特定的 到组件,但错误是致命的,将导致数据流 任务停止运行。在此之前可能会发布错误消息 有关失败的更多信息。 (SQL Server导入和 导出向导)
我不知道是否有人有任何建议。
因为Excel文件只有有限的数据类型,所以number是float类型。有许多数据类型与目标SQL Server表不匹配。
答案 0 :(得分:1)
对于高性能和控制数据类型转换:
1)使用另存为将Excel保存为CSV文本文件。
2)使用以下脚本导入数据:
BULK
INSERT mytable
FROM 'path_to_csdv_file.csv'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
您可以使用格式文件来描述数据 有关详细信息,请查看:
答案 1 :(得分:0)
听起来数据类型未对齐。我最简单的做法是使用导入向导来正确设置数据类型。
http://www.wiseowl.co.uk/blog/s231/schedule_data_import_in_sql_server_pt2.htm
正确设置数据类型后,请执行以下操作: 右键单击表格>脚本表格>创建至>新查询编辑器窗口。现在,只需将结果复制/粘贴到Excel。填写所有字段的所有数据类型。另外,这样做:
右键单击表>脚本表格>插入到>新查询编辑器窗口。
最终,你应该得到这样的东西。
CREATE TABLE [dbo].[Something]
(
[Date] VARCHAR(MAX),
Change VARCHAR(MAX),
Index_Code VARCHAR(MAX),
Price_Return_Level VARCHAR(MAX)
)
bulk insert dbo.GII_ICLstg
from 'C:\your_path_to_file.txt'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
INSERT INTO dbo.Something
SELECT
[Date] = CASE WHEN ISDATE([Date])=1 THEN CAST([Date] AS DATETIME) ELSE NULL END,
[Change],
Index_Code,
Price_Return_Level = CASE WHEN ISNUMERIC(Price_Return_Level) = 1
FROM dbo.Something
就我个人而言,我认为这是做这类事情的最简单方法。