SQLコマンドテキストにprocが格納されていますが、これにはテーブル名を含むパラメータが渡されています。 procはそのテーブルからデータを返します。私は、いくつかのビジネスロジックがprocで設定された結果に起こる必要があるため、OLE DBソースとしてテーブルを直接呼び出すことはできません。 SQL 2008ではこれはうまくいきました。アップグレードされた2012年のパッケージでは、「動的SQLが含まれているため、メタデータを特定できませんでした。結果セットを明示的に記述するにはWITH RESULT SETS句を使用することを検討してください。SSIS 2012のOLE DBソースで動的SQLを使用
問題は、パラメータとして渡されるテーブル名が異なる値になり、その結果のフィールドが毎回異なる可能性があるため、procでフィールド名を定義できないという問題です。誰でもこの問題に遭遇したり、何か考えがありますか?私は "dm_exec_describe_first_result_set"、一時テーブル、および結果セットを含む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 + '))')
あなたが '' '' '' '' '' 'FMTONLY OFFを試した場合、 EXEC MyProc'をOLEDBソースに追加します。それはそれをより良くするか? – billinkc
試しましたが、動作しません。 SSISにはメタデータが必要です。 – jdf35
Bummer。 2008年から2012年に移行した一時テーブルを扱う友人のためのトリックワークを持っていました。 – billinkc