【发布时间】:2014-01-21 13:46:28
【问题描述】:
我有一个在 SQL Server 2008 R2 上按计划运行的 SSIS 作业。该作业采用多个逗号分隔的文本文件并将它们导入 SQL 表。我大约 4 年前创建了这个 SSIS 包,并且我定期更新它而没有问题。我最近不得不对一项数据流任务进行小改动。这在我的机器上运行良好,但是当我将作业放在服务器上时,它出错了。仔细检查,它出错的原因是它试图放入 SQL 表的值都包含值的引号。这会导致非字符串值(如整数类型)出错,或者只是在字符串字段中引入引号。
我的源文本文件确实包含一些值的引号。以下是两个示例行:
"536518*1","A120","B002209A12","AA",01-16-14,3,0.000,1555.50,"0",0,"UA",12-17-13," ","KS","A","04","1","MNS","AM"
"540039*1","G040","YPCILANHA/S224","Y",01-16-14,2,0.080,905.28,"0",0,"SM",01-16-14 ,"","","A","02","1","MNA","AM"
因此,在我的平面文件连接管理器中,我将“文本限定符”设置为引号,如下所示:
真正奇怪的是,有问题的数据流任务不是我修改的那个。我没有以任何方式更改 SQL 表定义。最后,我在我的 DFT 中添加了派生列以手动去除引号。示例:
REPLACE([Column 0],"\"","")
由于每行都必须这样做,我不得不这样做 18 次,这很烦人。
另一个非常奇怪的症状是这在我的笔记本电脑上运行良好。如果我在笔记本电脑上运行 SSIS 作业并在生产服务器上更新相同的表,它工作正常(没有引号)。只有当作业通过计划的 SQL 作业自动运行时才会出现此问题。
我会非常感谢任何人提出的任何建议。
谢谢!
【问题讨论】:
-
错误信息是什么?
-
对不起,我应该把它包括在内。错误如下所示。同样,这是因为它试图将“5”之类的值(包括引号)放入整数字段中。 [导入未结订单数据]中的错误:将“第 8 列”(42) 列转换为“已分配数量”(279) 列时数据转换失败。转换返回状态值 2 和状态文本“由于可能丢失数据,无法转换该值。”。
-
可能是笔记本电脑上的 SQL Server 版本不同,还是配置文件不同?计划的作业是否使用配置文件?配置理论上可以覆盖连接管理器属性,如文本限定符。
-
我还不明白为什么“5”包含双引号,如果它们应该被剥离,因为它们被定义为文本限定符;您是否尝试过数据查看器来查看在插入数据库之前引用是否仍然存在?
-
Jayvee - 我在最终目的地之前添加了一个数据查看器,并且值没有引号。不幸的是,这只是当作业在我的笔记本电脑上运行时,这同样适用于生产服务器。我很难理解为什么这只发生在服务器的自动工作中。
标签: sql sql-server-2008 ssis