4

我在 SSIS 中使用数据流任务将数据从一台服务器 (SQL Server 2005) 获取到另一台服务器 (SQL Server 2008 R2)。在OLE DB Source连接中,我使用 SQL 命令来获取数据。在这个命令中,我已经将内容转换为某种数据类型:

SELECT
CAST(column1 AS VARCHAR(10)) AS NameColumn1
,CAST(column2 AS INT) AS NameColumn2
,CAST(REPLACE(REPLACE(REPLACE(REPLACE(column3, CHAR(10), ''), CHAR(13), ''), CHAR(9), ''), ';', '-') AS VARCHAR(100)) AS NameColumn3
,CAST(REPLACE(REPLACE(REPLACE(REPLACE(column4, CHAR(10), ''), CHAR(13), ''), CHAR(9), ''), ';', '-') AS VARCHAR(255)) AS NameColumn4
...
FROM (etc.)

(请注意,转换是转换为源数据库中列值的原始数据类型。因此 column1 的数据类型最初VARCHAR(10)是 ,column4的数据类型最初是VARCHAR(255),等等。)

之所以使用这些强制转换,是因为在包中我收到了以下关于column3and的警告column4

验证警告。[...] 由于将数据从长度为 8000 的数据流列“column4”插入到长度为 255 的数据库列“column4”,可能会发生截断。

似乎强制转换不起作用,因为 column3 和 column4 的截断警告不断出现。(我已经将OLE DB Source中的截断警告设置为Ignore failure,但这似乎没有什么区别。)

我在网上找不到任何东西,暂时将通过将列导入为VARCHAR(8000). 但我很想知道 SSIS 中这种行为的原因是什么。有人有线索吗?

4

1 回答 1

4

进入源组件的高级属性并验证第 3 列和第 4 列的大小(在输入和输出属性中)。如果它们已经被计算为 varchar(8000) 那么您将不得不手动更改它们。

或者,删除该组件并从一开始就使用您的 Select / Cast 添加一个新组件 - 这应该正确分配正确的字段长度。

于 2013-03-12T13:29:19.713 回答