SSIS:将数据从Excel源加载到OLE DB目标时,行失败

时间:2020-06-27 05:46:31

标签: sql-server ssis

我对此很陌生。我正在尝试使用SSIS包将Excel文件(从SQL Server表复制并保存到Excel文件)导入SQL Server。

这是我创建Excel文件的方式:

CREATE TABLE #drivers_source 
(
    FirstName NVARCHAR(255) NOT NULL, 
    LastName NVARCHAR(255) NOT NULL, 
    CarMake NVARCHAR(255) NOT NULL, 
    License NVARCHAR(255) NOT NULL, 
    State NVARCHAR(255) NOT NULL
)

INSERT INTO #drivers_source 
VALUES ('Amy', 'Ashley', 'Toyota', '15629686', 'New York'),
       ('Bob', 'Burns', 'Ford', '25448665', 'Washington'),
       ('Cindy', 'Cody', 'Honda','370659CA', 'California'),
       ('Dave', 'Doe', 'Audi','45988718', 'Texas');

SELECT * 
FROM #drivers_source;

我将数据(带有标头)从#drivers_source复制到Excel文件中并保存。

这是我创建目标表的方式:

CREATE TABLE dbo.drivers_destination 
(
    FirstName NVARCHAR(255) NOT NULL, 
    LastName NVARCHAR(255) NOT NULL, 
    CarMake NVARCHAR(255) NOT NULL, 
    License NVARCHAR(255) NOT NULL, 
    State NVARCHAR(255) NOT NULL
);

我创建了一个带有Excel源和OLEDB目标的SSIS包,运行该包,发现仅成功插入了前两行。我花了几个小时试图找出原因,但仍然没有任何线索。

任何关于为什么会发生此错误以及如何解决该错误(不影响源数据)的想法,将不胜感激!

1 个答案:

答案 0 :(得分:0)

检查Excel Source组件的配置。听起来“ Type Guessing”已配置为根据前两行猜测列类型-默认TypeGuessRows设置通常为8。

在这种情况下,它会基于前两个值Licenseint认为15629686列为25448665类型,然后在它出现时出现转换错误尝试将370659CA转换为int。

在Excel Source的Output列中确认License列已配置为使用数据类型String [DT_STR]Unicode string [DT_WSTR]而非Four-byte signed integer [DT_I4]之类的数据。