我在BI_Test_Server
中运行了我的存储过程。
然后我使用exec [dbo].[bi_resource_dimension_sp] 1,1
我在SQL Server management Studio
成功获得了结果。所以我创建了一个Data Flow task
,把OLE DB源,数据连接和OLE DB目的地。我编辑了OLE DB源并创建了一个新连接。内部OLE DB源SQL命令:SQL命令文本我把步骤4。
在OLE DB源 - SQL命令文本中,我放置exec [dbo].[bi_resource_dimension_sp] 1,1
以便从OLE DB源中选择所有数据,然后将其连接到数据连接并将数据转储到OLE中数据库目的地。
但是当我尝试预览结果时,我收到错误 SQL命令没有返回列信息。
理想情况下,我需要勾选所有复选框以确保获取和放置数据的列。这是我在第4步之后尝试和即将做的事情。
它表示错误,您可以“如果您想继续操作,请选择确定”。但是,如果我这样做,当我去列部分(在连接管理器和错误输出之间的左上部分)。它会显示空白列。
请帮忙。
答案 0 :(得分:3)
您可以尝试在数据流中使用“OLE DB命令”。这对我来说有所不同。我使用VS 2013并使用与“OLE DB目标”相同的过程不起作用,但使用“OLE DB命令”是好的。我注意到“OLE DB命令”也存在一些障碍,尤其是存储过程中哪些不正确,但这对SSIS来说是一个加分。
数据流任务对于检索可以执行SQL的列/参数非常严格,特别是对于OLE DB目标(现在我注意到它也适用于Source)。最常出现此错误。 Microsoft(OLE DB Destination recommendations)建议使用OLE DB命令而不是目标。我还建议尽可能使用舞台临时表。 即使使用OLE DB命令,我发现需要刷新它几次,以便输入/目标列/过程参数可用于映射。
这是注释(不确定它是否适用于源,但可能是):
请注意
OLE DB目标不支持参数。如果需要执行参数化INSERT语句,请考虑OLE DB命令转换。有关更多信息,请参阅OLE DB命令转换。
答案 1 :(得分:1)
我想你的存储过程中可能有一个需要别名的列。你的SQL中没有COUNT()或SUM()这样的东西吗?在SSMS中运行存储过程时,您是否在任何地方看到“(无列名称)”?
答案 2 :(得分:1)
SQL DB Pros有答案。 SET FMTONLY OFF解决方案对我有用 - 性能不是真正的问题,因为我的SP还是有动态SQL。
答案 3 :(得分:1)
不是解决方案,只是解决方法!
将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 表的源数据。由于所有列都在表中具有别名,因此您不应再遇到此问题。
答案 4 :(得分:1)
在使用SSIS包数据流中的Oracle服务器的OLE DB源连接时,弹出此错误。我在SQL命令(文本)中设置了SQL语句,我在命令的第一行放置了注释。删除评论解决了问题。
- 扩展声明的当前sql选择:<<<<删除评论,它会工作 SELECT CH.CLAIM_NUMBER,CD.LINE_NUMBER,CD.SUB_LINE_CODE,CD.SEQ_PROV_ID,...
答案 5 :(得分:0)
答案 6 :(得分:0)
使用SQL Command仅从excel导入数据时,会出现此问题, 并且标头不是从excel派生的,那么当我们将连接字符串设为动态时,就会出现此问题:
例如,我想通过SQL Command读取数据范围A2:P。 选择F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16 来自[Data $ A2:P]
到目前为止,您将不会看到任何错误,但是当您更改连接字符串以使其动态时,错误便开始在Excel Source上显示。
现在解决方案非常容易,只需检查动态连接后选择的excel文件,打开该文件并选择“所有单元格”,然后保存它,然后先删除或刷新第一个,然后再次建立连接,错误将自动消失! !! 希望对您有帮助!
答案 7 :(得分:0)
我也遇到了这个错误,因为 SP 数据库和连接数据库不同。做同样的事情修复它。