9 に答える
You could try using "OLE DB Command" in Data Flow. This made a difference for me. I am using VS 2013 and using the same procedure with "OLE DB Destination" is not working, but with "OLE DB Command" is fine. I noticed some obstacles with "OLE DB Command" also, especially with Stored Procedures what are not correct, but that is a plus for SSIS.
Data flow tasks are very strict with retrieving columns/parameters on which it can do the SQL, especially for OLE DB Destination(now I notice it is for Source also). most often with this error. It is recommended by Microsoft(OLE DB Destination recommendations) to use OLE DB command instead of destination. I would also recommend using stage temporary tables when possible. Even with the OLE DB Command, I found a need to refresh it a couple of times so the input/destination columns/procedure parameters came in available for mapping.
Here is the note(not sure if it is applicable for source, but could be):
Note
The OLE DB destination does not support parameters. If you need to execute a parametrized INSERT statement, consider the OLE DB Command transformation. For more information, see OLE DB Command Transformation.
SQL DB Prosに答えがあります。SET FMTONLY OFF ソリューションは私にとってはうまくいきました.SPには動的SQLがあったので、パフォーマンスは実際には問題ではありませんでした.
解決策ではなく、単なる回避策です。
SP からのデータを中間一時テーブルにダンプします。このテーブルは で作成できますExecute SQL Task
。
CREATE TABLE #Temp
(
.....
.....
)
insert into #Temp
exec [dbo].[bi_resource_dimension_sp] 1,1
Delay Validation
プロパティをTrue に設定し、OLEDB 接続へのプロパティをTrueに設定します。ここで、DFT で、SP の代わりに#tempテーブルからデータを取得します。テーブル内のすべての列にエイリアスがあるため、この問題に直面することはもうありません。RetainSameConnection
ストアド プロシージャにエイリアスが必要な列があると思います。SQL にCOUNT( ) や SUM( ) のようなエイリアスがありませんか? SSMS でストアド プロシージャを実行すると、"(列名なし)" がどこかに返されますか?
SP データベースと接続データベースが異なるため、このエラーも発生しました。両方を同じようにすると修正されました。