为什么我的CASTS似乎在SSIS中被忽略了?

时间:2013-03-12 10:58:18

标签: sql-server-2005 ssis sql-server-2008-r2 truncation

我在SSIS中使用数据流任务将数据从一台服务器(SQL Server 2005)获取到另一台服务器(SQL Server 2008 R2)。在 OLE DB源连接中,我使用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),等等。)

使用这些演员表是因为我在column3column4收到了以下警告:

  

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

似乎演员阵容不起作用,因为column3和column4的截断警告不断出现。 (我已经在 OLE DB源中将截断警告设置为忽略失败,但这似乎没有什么区别。)

我在网上找不到任何内容,暂时通过导入VARCHAR(8000)列来“解决”这个问题。但我很想知道SSIS中这种行为的原因是什么。有人知道吗?

1 个答案:

答案 0 :(得分:4)

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

或者,删除组件并从头开始添加一个新的选择/ Cast,这应正确分配正确的字段长度。