パッケージを動的に作成するSSISスクリプトタスク(SQL 2008 R2)についてサポートが必要です。Sage Timberline(現在はSage 300にリブランドされています)PervasiveSQL環境からSQLサーバーデータウェアハウスにデータをコピーするパッケージを改良しています。Timberlineへの接続を開き、データをSQLServerのテーブルにコピーするパッケージを作成できます。問題は、timberlineの会社ごと、およびSQLのテーブルごとに、個別のデータフロータスクを作成する必要があることです。3つのTimberline会社フォルダーと各フォルダー内のテーブルの数を考えると、これは作成に多くの時間がかかり、保守とトラブルシューティングが面倒になります。
Foreachループを使用して、ADO / ODBCソース(Timberline)、OLEデスティネーション(SQL)を作成し、列マッピングを動的に処理するパッケージを作成しようとしています。ここで、必要なことをほぼ 実行するコードを見つけました。
私はこのコードをテストしましたが、OLESQLのソースと宛先を使用するとうまく機能します。このスクリプトを機能させるのは、列のマッピングを動的に処理することです。したがって、100個程度のテーブルのForeachループに配置すると、各ループでデータフローを動的に作成して列をマップし、新しいパッケージを実行できます。
私の問題は、ODBCを使用してのみTimberlineに接続できることです。そのため、スクリプトを変更して、OLEではなくADO NET(ODBC)を使用したソース接続を作成する必要があります。私はこれを理解しようとして多くの問題を抱えています。誰かがこれを手伝ってくれませんか?
このアプローチ以外に、私が最初に試した他のいくつかのことを次に示します。
解決策:リンクサーバーをTimberline Pervasive SQLにセットアップする
問題:SQLサーバーが64ビットで、Timberlineドライバーが32ビットです。リンクサーバーを使用すると、アーキテクチャの不一致エラーが返されます。私はSageに電話しましたが、64ビットドライブをリリースする予定はないと言われました。
解決策:SQL転送タスクの1つを使用してください
問題:SQLデータベースでのみ機能します。このソースはPervasiveSQLデータベースです
解決策:「INSERT…INTO…」タイプのスクリプトを使用してください
問題:これにはリンクサーバーが必要です。上記の問題を参照してください
これが私が助けを必要としている元のVB.NETコードのセクションです:
'To Create a package named [Sample Package]
Dim package As New Package()
package.Name = "Sample Package"
package.PackageType = DTSPackageType.DTSDesigner100
package.VersionBuild = 1
'To add Connection Manager to the package
'For source database (OLTP)
Dim OLTP As ConnectionManager = package.Connections.Add("OLEDB")
OLTP.ConnectionString = "Data Source=.;Initial Catalog=OLTP;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"
OLTP.Name = "LocalHost.OLTP"
'To add Load Employee Dim to the package [Data Flow Task]
Dim dataFlowTaskHost As TaskHost = DirectCast(package.Executables.Add("SSIS.Pipeline.2"), TaskHost)
dataFlowTaskHost.Name = "Load Employee Dim"
dataFlowTaskHost.FailPackageOnFailure = True
dataFlowTaskHost.FailParentOnFailure = True
dataFlowTaskHost.DelayValidation = False
dataFlowTaskHost.Description = "Data Flow Task"
'-----------Data Flow Inner component starts----------------
Dim dataFlowTask As MainPipe = TryCast(dataFlowTaskHost.InnerObject, MainPipe)
' Source OLE DB connection manager to the package.
Dim SconMgr As ConnectionManager = package.Connections("LocalHost.OLTP")
' Create and configure an OLE DB source component.
Dim source As IDTSComponentMetaData100 = dataFlowTask.ComponentMetaDataCollection.[New]()
source.ComponentClassID = "DTSAdapter.OLEDBSource.2"
' Create the design-time instance of the source.
Dim srcDesignTime As CManagedComponentWrapper = source.Instantiate()
' The ProvideComponentProperties method creates a default output.
srcDesignTime.ProvideComponentProperties()
source.Name = "Employee Dim from OLTP"
' Assign the connection manager.
source.RuntimeConnectionCollection(0).ConnectionManagerID = SconMgr.ID
source.RuntimeConnectionCollection(0).ConnectionManager = DtsConvert.GetExtendedInterface(SconMgr)
' Set the custom properties of the source.
srcDesignTime.SetComponentProperty("AccessMode", 0)
' Mode 0 : OpenRowset / Table - View
srcDesignTime.SetComponentProperty("OpenRowset", "[dbo].[Employee_Dim]")
' Connect to the data source, and then update the metadata for the source.
srcDesignTime.AcquireConnections(Nothing)
srcDesignTime.ReinitializeMetaData()
srcDesignTime.ReleaseConnections()
前もって感謝します!