尽管我给了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)
)
)
参考官方文档:
OLE DB Command转换为数据流中的每一行运行一个SQL语句。例如,您可以运行插入,更新或删除数据库表中的行的SQL语句。
它不用于select语句。我认为您正在使用SQL Command访问模式或查找转换寻找执行SQL任务或OLE DB源。
您可以将查询结果存储在类型为object的SSIS变量中。有很多文章说明了此过程:
您可以使用OLE DB源从类似的命令生成行,您可以检查以下答案,因为它提供了有关在OLE DB源中使用结果集的一些有用信息:
此外,您也可以查看以下文章以获取一些有用的信息:
我不确定它是否支持类似的查询,但是您可以在以下链接中了解有关此组件的更多信息: