我有一個存儲過程作爲SQL命令文本,它正在傳遞一個包含表名的參數。 proc然後從該表中返回數據。我無法直接將該表作爲OLE DB源調用,因爲某些業務邏輯需要發生在proc中的結果集中。在SQL 2008中,這工作得很好。在升級後的2012包中,我得到「元數據無法確定,因爲...包含動態SQL,請考慮使用WITH RESULT SETS子句明確描述結果集。」在SSIS 2012的OLE DB源中使用動態SQL
問題是我無法在proc中定義字段名稱,因爲作爲參數傳遞的表名可能是不同的值,並且每次生成的字段都可能不同。任何人遇到這個問題或有任何想法?我用動態SQL使用「dm_exec_describe_first_result_set」,包含WITH RESULT SETS的臨時表和CTE嘗試了各種各樣的事情,但它在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 + '))')
如果您嘗試過'SET FMTONLY OFF; EXEC MyProc'在你的OLEDB源。這會讓它變得更好嗎? – billinkc
嘗試過,但它不起作用。 SSIS需要元數據。 – jdf35
無賴。如果這個技巧適用於從2008年到2012年處理臨時表的朋友。 – billinkc