9 回答
您可以尝试在数据流中使用“OLE DB 命令”。这对我产生了影响。我正在使用 VS 2013,并且使用与“OLE DB 目标”相同的过程不起作用,但使用“OLE DB 命令”就可以了。我还注意到“OLE DB 命令”存在一些障碍,尤其是存储过程不正确,但这是 SSIS 的一个优点。
数据流任务对检索可以执行 SQL 的列/参数非常严格,特别是对于 OLE DB 目标(现在我注意到它也适用于源)。最常出现此错误。Microsoft 建议(OLE DB 目标推荐)使用 OLE DB 命令而不是目标。我还建议尽可能使用阶段临时表。即使使用 OLE DB 命令,我也发现需要刷新几次,以便输入/目标列/过程参数可用于映射。
这是注释(不确定它是否适用于来源,但可能适用):
笔记
OLE DB 目标不支持参数。如果您需要执行参数化的 INSERT 语句,请考虑 OLE DB 命令转换。有关详细信息,请参阅 OLE DB 命令转换。
SQL DB Pros 给出了答案。SET FMTONLY OFF 解决方案对我有用——性能并不是真正的问题,因为无论如何我的 SP 都有动态 SQL。
在 SSIS 包数据流中使用 OLE DB 源连接到 Oracle 服务器时弹出此错误。我在 SQL 命令(文本)中设置了 SQL 语句,并在命令的第一行放置了注释。删除评论解决了这个问题。
-- 扩展声明的当前 sql 选择:<<<< 删除注释,它将起作用 SELECT CH.CLAIM_NUMBER, CD.LINE_NUMBER, CD.SUB_LINE_CODE, CD.SEQ_PROV_ID, ...
不是解决方案,只是一种解决方法!
将数据从您的 SP 转储到一个中间临时表中,您可以在Execute SQL Task
.
CREATE TABLE #Temp
(
.....
.....
)
insert into #Temp
exec [dbo].[bi_resource_dimension_sp] 1,1
将Delay Validation
属性设置为True并将RetainSameConnection
OLEDB 连接的属性设置为True。现在,在 DFT 中,而不是 SP,源数据来自#temp表。由于表中的所有列都有别名,因此您应该不再面临这个问题。
我在想您的存储过程中可能有一列需要别名。您的 SQL 中有没有类似 COUNT( ) 或 SUM( ) 的东西没有别名?当您在 SSMS 中运行存储过程时,您是否看到任何地方返回了“(无列名)”?
我也收到此错误,因为 SP 数据库和 Connection 数据库不同。做同样的事情就解决了。
当使用 SQL 命令仅从 excel 导入数据时会出现此问题,并且标头不是从 excel 派生的,然后当我们将连接字符串设为动态时,就会出现此问题::
例如,我想通过 SQL 命令读取数据范围 A2:P。从 [Data$A2:P] 中选择 F1、F2、F3、F4、F5、F6、F7、F8、F9、F10、F11、F12、F13、F14、F15、F16
到目前为止,您不会看到任何错误,但是当您更改连接字符串以使其成为动态时,Excel 源中将开始显示错误。
现在解决方案很简单,只需检查动态连接后选择的excel文件,打开该文件并选择所有单元格并保存它现在在删除第一个或刷新第一个后再次建立连接,错误将自动消失!!!希望对你有帮助!!!
我使用 SQL 查询(不是存储过程)遇到了这个问题,最终发现在我的查询开始时为我自己的最终重新教育而添加评论是我悲痛的根源。
--this is a query
select FieldA,
FieldB
from SomeTable
因“无列信息”错误而失败,而
Select
--this is a query
FieldA,
FieldB
from SomeTable
作品。
这是 SSIS 2012。