我有一个存储过程作为 SQL 命令文本,它正在传递一个包含表名的参数。然后 proc 从该表中返回数据。我不能直接将该表称为 OLE DB 源,因为某些业务逻辑需要发生在 proc 中的结果集上。在 SQL 2008 中,这很好用。在升级的 2012 包中,我得到“无法确定元数据,因为 ... 包含动态 SQL。考虑使用 WITH RESULT SETS 子句显式描述结果集。”
问题是我无法在 proc 中定义字段名称,因为作为参数传递的表名称可以是不同的值,并且每次生成的字段都可能不同。有人遇到这个问题或有什么想法吗?我已经使用“dm_exec_describe_first_result_set”、临时表和包含 WITH RESULT SETS 的 CTE 尝试了各种动态 SQL,但它在 SSIS 2012 中不起作用,同样的错误。上下文是许多动态 SQL 方法的问题。
这是我尝试过的最新事情,但没有运气:
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * FROM ' + @dataTableName
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr +',','') + [name] + ' ' + system_type_name FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 1)
exec('exec(''SELECT * FROM myDataTable'') WITH RESULT SETS ((' + @listStr + '))')