需求是将 001.csv、002.csv,003.csv等一系列文件导入SQL SERVER,对应的001、002、003表中去。
001、002、003表都在SQL SERVER中建好了。
为此用了FOREACH循环容器,设置好目录和变量Fullpath,添加一个“数据流任务”,增加数据流源,连好数据源表,然后在增加一个数据流目标,在“数据访问模式中”选择“表名变量或视图名变量”,然后这时“变量名称”中就出现了我设的全局变量Fullpath,设置了验证延迟。
执行过程中,出现OLEDB 目标出现错误:
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Opening a rowset for "001" failed. Check that the object exists in the database.
错误: 0xC004706B,位于 数据流任务, SSIS.Pipeline: "OLE DB 目标" failed validation and returned validation status "VS_ISBROKEN".
错误: 0xC004700C,位于 数据流任务, SSIS.Pipeline: One or more component failed validation.
但是001、002、003表其实是存在的,并且,如果我选择固定表001的话,是可以执行通过的。
为什么用变量做表名的时候,会显示001表不存在呢?
检查数据库中是否存在该对象。检查检查吧
存在,如果我在表中指定001这个表,就没问题,包括001.csv等等,因为看不到变量的具体值,所以我设了几个可能的情况,包括错误提示的001表,我都创建了,都处于可用状态
另存为xls,看看数据结构,在另存为csv。检查第一行是否是字段
第一行的确是字段,但是用指定表名的方式就没问题
为什么会跟表结构有关系呢?
如果第一行被当成数据,就会格式错误
可是那为什么指定到表名的时候,就不会有事呢?同样第一行都是字段名。
退一步说,如果第一行是 字段有什么办法吗?
不过返回都是 001表对象没找到
但是001表其实是在的
建的表的的Schema 和 库的默认Schema一致吗
一致的。大家可以做个测试,看看能否成功。谢谢
看看是不是是所有者的问题
如果OLE DB提供程序没有覆盖这些设置,则SSIS默认情况下将使用双引号作为加引号的标识符。更改SSIS OLE DB for SQLCommand并键入“ select * from dbo.table”,而不是从列表中选择表。
使用Sybase OLE DB提供程序时,请运行Sybase Configuration Manager,并将数据源从“启用带引号的标识符”更改为True(1),以在模式名和表名周围使用双引号。
将连接名称“ RetainSameConnection”的属性设置为True(默认为False)