SSIS OLE DB记录可用。来源:“ Microsoft SQL Server本机客户端11.0”结果:0x80004005,无法确定元数据

问题描述 投票:0回答:1

尽管我给了with结果集动态SQL,但出现以下错误。但是它要求相同。

OLE DB记录可用。来源:“ Microsoft SQL Server Native Client 11.0”结果:0x80004005描述:“由于语句'EXEC sp_executesql @ExecSQL'包含动态SQL,因此无法确定元数据。请考虑使用WITH RESULT SETS子句来明确描述结果集。”

错误:在摄取CSV文件时出现错误0xC0202080,流程,OLE DB命令1 [281]:无法从SQL命令的参数中检索目标列说明。

下面的代码在MS SQL Management Studio查询中工作正常。但是它在SSIS中给出了错误

DECLARE @tablename nvarchar(200),  @tablevalue nvarchar(1)

SELECT @tablename =CAST(FLOOR(RAND()*(100000-5+1)+5) as nvarchar)

Select @tablevalue='0'

DECLARE   @ExecSQL NVARCHAR(max)

SET @ExecSQL = 'SELECT d.tablename, d.tablevalue INTO mws_ssis_cust_senti_integration'+ @tablename+
+ ' from  ( select ''' + 'mws_ssis_cust_senti_integration' + @tablename + ''' as tablename, ''' + @tablevalue + ''' as tablevalue ) as d '


EXEC sp_executesql @ExecSQL

Set @tablename = N'mws_ssis_cust_senti_integration'+ cast(@tablename as nvarchar)

Set  @ExecSQL = 'select * from  ' + @tablename

EXEC sp_executesql @ExecSQL
WITH RESULT SETS
(
 (
 tablename varchar(max), tablevalue varchar(1)
 )
)
sql sql-server ssis etl dynamic-sql
1个回答
0
投票

为什么要在OLE DB命令中使用此命令?!

参考官方文档:

OLE DB Command转换为数据流中的每一行运行一个SQL语句。例如,您可以运行插入,更新或删除数据库表中的行的SQL语句。

它不用于select语句。我认为您正在使用SQL Command访问模式或查找转换寻找执行SQL任务OLE DB源

1-执行SQL任务

您可以将查询结果存储在类型为object的SSIS变量中。有很多文章说明了此过程:

2- OLE DB源

您可以使用OLE DB源从类似的命令生成行,您可以检查以下答案,因为它提供了有关在OLE DB源中使用结果集的一些有用信息:

此外,您也可以查看以下文章以获取一些有用的信息:

3-查找转换

我不确定它是否支持类似的查询,但是您可以在以下链接中了解有关此组件的更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.