我对此很陌生。我正在尝试使用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包,运行该包,发现仅成功插入了前两行。我花了几个小时试图找出原因,但仍然没有任何线索。
任何关于为什么会发生此错误以及如何解决该错误(不影响源数据)的想法,将不胜感激!
答案 0 :(得分:0)
检查Excel Source组件的配置。听起来“ Type Guessing”已配置为根据前两行猜测列类型-默认TypeGuessRows
设置通常为8。
在这种情况下,它会基于前两个值License
和int
认为15629686
列为25448665
类型,然后在它出现时出现转换错误尝试将370659CA
转换为int。
在Excel Source的Output列中确认License
列已配置为使用数据类型String [DT_STR]
或Unicode string [DT_WSTR]
而非Four-byte signed integer [DT_I4]
之类的数据。