ホストされているWebサービスから毎日データセットを取得する必要があります。 SSISパッケージでXMLの「列名」を取得できます。しかし、データセットのすべてのデータをcsv形式で取得するか、SQL Serverに直接取り込む必要があります。 (行と列、ヘッダーデータとデータセット)。
これはSSISで実現可能ですか?または、より良いアプローチはありますか?ご意見やアドバイスは大歓迎です。
これはSSISを使用して行う必要がありますか?その場合は、スクリプトタスク(C#またはVB.NET)でほぼ何でも実行できます。これにより、データをSSIS変数に直接取り込み、パッケージ全体で使用できます。
または、SQLCLRを介してこれを行うことができます。その場合、T-SQLから直接呼び出すことができます。これにより、ストアドプロシージャ、SQLエージェントジョブなどに簡単に統合できます。SSISのSQLタスクで呼び出すこともできます。ただし、SSISでスクリプトタスクを使用するのではなく、SQLCLRを使用する場合は少し注意する必要があります。 Stack Overflowのいくつかの回答で検討すべきいくつかの事項を文書化しました。
これらの回答から最も重要な点は次のとおりです。
次のMSDNページをご覧ください。
SQLCLRは「共有」コードです。 DBと所有者の組み合わせごとに1つのアプリドメインがあります。したがって、このコードを呼び出すすべてのセッションは同じアプリドメインで動作します。同じURIに対して複数の同時リクエストが行われた場合、ServicePointManager( ServicePointManager.DefaultConnectionLimit )によって課される同時接続制限に拘束されるため、最初の2つを除くすべてが「保留中」になる可能性があります。そして、デフォルトの制限はなんと2
!つまり、そのURIへのすべての追加リクエストは、すでに2つのアクティブ/オープンHttpWebRequest
sが存在しますが、辛抱強くインラインで待機します。 HttpWebRequest
オブジェクトの.ServicePoint.ConnectionLimit
プロパティを設定することで、これを増やすことができます。
アセンブリをWITH PERMISSION_SET = EXTERNAL_ACCESS
としてマークする必要があります。怠惰にならず、TRUSTWORTHY ON
を回してください。 不必要なセキュリティリスク です。これを安全にする適切な方法は、次のことです。
[master]
データベースで、アセンブリのDLLから非対称キーを作成します。[master]
で、その非対称キーからログインを作成しますEXTERNAL ACCESS Assembly
権限を付与しますPERMISSION_SET
のEXTERNAL_ACCESS
を使用してアセンブリを作成します。notUNSAFE
SQLCLRパスを下に行きたいが、コーディングなどを台無しにしたくない場合、1つのオプションは、事前に作成された関数を取得することです。 SQL# SQLCLRライブラリ(私が書いたもの)にはINET_GetWebPagesという関数があります(URLを呼び出し(GETまたはPOST data)に渡して)応答(および応答ヘッダーを個別のXMLフィールドとして返す)を呼び出す無料バージョンで利用可能)。