一括データインポートの提案


8

現在、Excelスプレッドシートからデータをインポートする必要があるプロジェクトに取り組んでいます。データは事前​​に定義されたテンプレートからインポートされ、考えていることから、まず一時テーブルにデータをアップロードしてクリーニング操作を実行します(不要な情報の削除、親テーブルへの新しい行の追加、それらのFKの取得など)。

  • 私が知っている必要があるのは、私たちの努力を減らすことができるツールやユーティリティがあることです。
  • さまざまなソース(主にExcelスプレッドシートから)から一括レコードを挿入する最良の方法は何ですか?

これから作成するアプリケーションは、ユーザーがSQLサーバーの制御を制限されているWebベースのアプリケーションです。ユーザーはブラウザを介してファイルをアップロードし、残りの操作はサーバー側で行われます。
kodvavi

回答:


9

SSISはこれに進む方法です。これまでにパッケージをビルドしたことがなく、ソースファイル(スプレッドシートも参照)が常に同じものであることがわかっている場合、SQL Serverのインポート/エクスポートウィザードを使用して実行できます。SSMSでデータベースを右クリックし、[タスク]> [データのインポート(またはエクスポート)...]を選択します。

これにより、ソース/宛先ファイルと宛先テーブル(まだ存在しない場合はテーブルを作成できます)を選択する手順を説明するウィザードが開きます。どの列をどこに配置するかをマップする必要がありますが、ウィザードは非常に簡単です。完了すると、パッケージを実行または保存する(または両方を実行する)ように求められます。パッケージを保存します。これにより、ファイルシステムに保存することを選択した場合、パッケージは.dtsx形式で保存されます。他のオプションは、パッケージをSQL Server自体に保存することです。これにより、パッケージがmsdbシステムデータベースに保持されます。

パッケージを保存したら、SQLエージェントジョブを作成してそのパッケージを定期的に実行し(スケジュールを指定)、SSISを使用して常にテーブルをロードできるようにします。SSISについて詳しく知りたい場合は、PragmaticWorksで私の会社の無料のWebセミナー(BIスタック全体をカバー)を確認してください。


実際には、Webベースのアプリケーションを作成しているため、ユーザーがデータベースインターフェイスに直接アクセスすることはできません。このアプリケーションでは、最初にファイルをインポートしてから、残りの操作をアプリケーションで実行します。
kodvavi

1
@kodvavi; .netコードを介してSSISパッケージを呼び出すことができます...
gbn

1
@kodvavi、その発言の意味がわかりません。Webアプリには通常、データのロードを開始するジョブがないので、なぜそれが問題になるのでしょうか。データベースのETL部分とWebアプリケーションインターフェイスは、2つの異なるものです。
SQLChicken

多くの人がWebからSSISパッケージを開始することを知っていますが、Excelソースでどれだけ問題が発生する可能性があるかを考えると、私には悪い考えのようです。
Nick.McDermaid 2017年

5

ExcelからSQL Serverにデータをインポートする方法の1つの例を次に示します。主な問題の1つは、ExcelとSQL Serverの間でデータ変換コンポーネントを使用し、ExcelがデータをNVARCHARとして扱うため、NVARCHARからVARCHARへの変換を確実に行うことです。

http://www.mssqltips.com/tip.asp?tip=1393


nvarcharは問題ありません。多言語属性をサポートするデータベースも用意されています。トピスを見直しています。thanx
kodvavi


0

からは何も破棄しませんmr. gbn,Sankar Reddy,SQLChicken。しかし、SQLでExcelシートをインポートする簡単な方法は 'OPENROWSET' TSQLを使用することです。

たとえばuserTestDBデータベースにExcelシートをインポートします。データベースに[user]テーブルをすでに作成しているとしTestDBます。次に、単純なopenrowset TSQLは以下のようになります

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

注:このTSQLはSQL Server 2012環境で作成しています。SQLサーバーごとに、openrowset OLEDBプロバイダーは異なります。OLEDBそのバージョンのSQLサーバーでサポートされているリンクサーバー->プロバイダーを確認してください。私の場合はそうですACE.OLEDB.12.0。インポートする前にAllow inprocess、そのMICROSOFT.ACE.OLEDB.12.0プロバイダーがチェックされているかどうかを確認してください。そのようにチェックする必要があります ここに画像の説明を入力してください

注:-実稼働環境でテストされています。しかし、あなたの場合、テスト環境でテストする必要はありません。本番環境で直接実行しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.