ExcelワークシートからSQL挿入スクリプトを生成する


107

データベースに追加したい大きなExcelワークシートがあります。

このExcelワークシートからSQL挿入スクリプトを生成できますか?


2
私は両方のためのSQLスクリプトを取得するためのシンプルなツール作成insertupdate 右ここに
Pathros

VBAマクロを使用してSQLコマンドを生成することもできます。もっとここに:stackoverflow.com/questions/1570387/...
Petrik

回答:


201

前述の方法のいずれかを使用してインポートすることは、それが本当に大きなファイルである場合に理想的ですが、Excelを使用して挿入ステートメントを作成できます。

="INSERT INTO table_name VALUES('"&A1&"','"&B1&"','"&C1&"')"

MS SQLでは次を使用できます。

SET NOCOUNT ON

すべての「影響を受ける1行」のコメントを表示することを控える。そして、多くの行を実行していてエラーが発生する場合は、ステートメントの間にGOを時々置きます


3
使用して=CONCATENATE()いたが、&標識を使用すると読みやすさが大幅に向上する。
mastazi 2015

1
@mastazi同意した!しばらく前に&パラメーターの制限にぶつかったときに切り替えました。CONCATENATE()制限が255のパラメーターであるため、これは一般的な問題ではありませんが、元に戻すことは考えていません。
Hart CO

1
CONCATENATE()はその方法です。数式バーのfxアイコンをクリックするだけで、入力した内容を確認できます。使用して署名するよりもはるかにクリーンです。もちろん、&記号を使用するのはかっこいいですが、二重引用符または一重引用符がある場合、欠けているものを永久に数えることになります。
ian0411 16

1
セルに引用符がある場合は機能しません。正しいバージョンの私の答えを確認してください。
Simon Baars 2017

2
@PreshanPradeepa同じ構文を使用できます。SQLServerは、有効な整数である限り、整数が引用符で囲まれているかどうかを考慮しません。
Hart CO

29

で多くの時間を節約する便利なツールがあります

http://tools.perceptus.ca/text-wiz.php?ops=7

テーブル名、フィールド名、データを入力するだけです-タブで区切ってGo!


7
機密データをウェブに投稿しないでください。Webアプリケーションに送信したデータがどうなるかを知る方法はありません。これらのツールの一部は、データを保存して一般に公開します
GabiM '20

28

以下に示すように、Management Studioインターフェースを介して適切なテーブルを作成し、テーブルにデータを挿入できます。データの量によっては時間がかかる場合がありますが、非常に便利です。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


ハンディ。IDENTITY列では、行が挿入されると値が自動生成されるため、その列のデータは無視されますが、コピーバッファーには列が必要であることがわかります。
fortboise 2015年

IDENTITY列を列リストの最後にすることができ、追加の列を用意する必要がまったくありません。
Andrey Morozov

1
ExcelシートでIDENTITY値を指定しない場合。IDENTITY列を削除することで、編集の上位200行のSQLスクリプトを変更して再実行できます。したがって、IDENTITYなしで値をコピーして貼り付けると、このメソッドは機能します。
aozan88 2016年

これは、問題が発生した他のユーザーのExcelの日付と時刻のフィールドでは機能しません。日時データは、なんらかの理由でSQL側で「バイナリ」データに変換されます。
Kevin Vasko、2017年

1
@condiosluzverde自分の答えを投稿することをお勧めします。この回答を編集する場合、変更はおそらくコミュニティモデレータによって拒否されます。
Andrey Morozov

16

次のExcelステートメントを使用できます。

="INSERT INTO table_name(`"&$A$1&"`,`"&$B$1&"`,`"&$C$1&"`, `"&$D$1&"`) VALUES('"&SUBSTITUTE(A2, "'", "\'")&"','"&SUBSTITUTE(B2, "'", "\'")&"','"&SUBSTITUTE(C2, "'", "\'")&"', "&D2&");"

これは、列名を考慮し、列内の引用符によるコンパイルエラーを取り除くため、Hart COの回答よりも優れています。最後の列は、引用符なしの数値列の例です。


1
よくできました。GoogleSheetsでは、列名の参照を囲む `(グレイブ/バックティック)を削除する必要がありました。
secretwep

5

データベースによっては、CSVにエクスポートしてからインポート方法を使用できます。

MySQL- http://dev.mysql.com/doc/refman/5.1/en/load-data.html

PostgreSQL- http://www.postgresql.org/docs/8.2/static/sql-copy.html


3
MS SQL、SSMSのインポートウィザードを使用してExcelファイルをインポートできます。
Hart CO

1
@HartCOに詳細を追加するには-SSMSインポートウィザードに移動するには、データベースを右クリックし、タスクにカーソルを合わせ、コンテキストメニューの下部にある[データのインポート...]をクリックします。ウィザードの手順に従います。
qxotk

2

VBを使用して、データの周りに適切なSQLステートメントを行ごとに追加するファイルに出力するものを書き込むことができます。私は以前これをやったことがあります。


1

これは非常にうまく機能する別のツールです...

http://www.convertcsv.com/csv-to-sql.htm

タブで区切られた値を受け取り、INSERTスクリプトを生成できます。コピーして貼り付け、手順2のオプションで、[最初の行は列名です]チェックボックスをオンにします

次に、下にスクロールして、手順3で、「Schema.Table or View Name:」ボックスにテーブル名を入力します。

テーブルの削除と作成のチェックボックスにも注意を払い、生成されたスクリプトを実行する前に必ず確認してください。

これは、私が見つけた最も速くて最も信頼できる方法です。


1

使用ConvertFrom-ExcelToSQLInsertからImportExcel PowerShellのギャラリーで

NAME
    ConvertFrom-ExcelToSQLInsert
SYNTAX
    ConvertFrom-ExcelToSQLInsert [-TableName] <Object> [-Path] <Object> 
      [[-WorkSheetname] <Object>] [[-HeaderRow] <int>] 
      [[-Header] <string[]>] [-NoHeader] [-DataOnly]  [<CommonParameters>]
PARAMETERS
    -DataOnly
    -Header <string[]>
    -HeaderRow <int>
    -NoHeader
    -Path <Object>
    -TableName <Object>
    -WorkSheetname <Object>
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
ALIASES
    None
REMARKS
    None


0

このクエリは、Excelファイルのデータをデータベースに挿入するために生成しました。このIDと価格には、数値と日付フィールドもあります。このクエリは、私が必要とするすべてのタイプをまとめたものです。

="insert into  product (product_id,name,date,price) values("&A1&",'" &B1& "','" &C1& "'," &D1& ");"


    Id    Name           Date           price 
    7   Product 7   2017-01-05 15:28:37 200
    8   Product 8   2017-01-05 15:28:37 40
    9   Product 9   2017-01-05 15:32:31 500
    10  Product 10  2017-01-05 15:32:31 30
    11  Product 11  2017-01-05 15:32:31 99
    12  Product 12  2017-01-05 15:32:31 25

0

以下のC#メソッドを使用して、Excelシートを使用して挿入スクリプトを生成できます。メソッドを実行する前に、NuGetパッケージマネージャーからOfficeOpenXmlパッケージをインポートする必要があります。

public string GenerateSQLInsertScripts() {

        var outputQuery = new StringBuilder();
        var tableName = "Your Table Name";
        if (file != null)
        {
            var filePath = @"D:\FileName.xsls";

            using (OfficeOpenXml.ExcelPackage xlPackage = new OfficeOpenXml.ExcelPackage(new FileInfo(filePath)))
            {
                var myWorksheet = xlPackage.Workbook.Worksheets.First(); //select the first sheet here
                var totalRows = myWorksheet.Dimension.End.Row;
                var totalColumns = myWorksheet.Dimension.End.Column;

                var columns = new StringBuilder(); //this is your columns

                var columnRows = myWorksheet.Cells[1, 1, 1, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                columns.Append("INSERT INTO["+ tableName +"] (");
                foreach (var colrow in columnRows)
                {
                    columns.Append("[");
                    columns.Append(colrow);
                    columns.Append("]");
                    columns.Append(",");
                }
                columns.Length--;
                columns.Append(") VALUES (");
                for (int rowNum = 2; rowNum <= totalRows; rowNum++) //selet starting row here
                {
                    var dataRows = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                    var finalQuery = new StringBuilder(); 
                    finalQuery.Append(columns);

                    foreach (var dataRow in dataRows)
                    {
                        finalQuery.Append("'");
                        finalQuery.Append(dataRow);
                        finalQuery.Append("'");
                        finalQuery.Append(",");
                    }
                    finalQuery.Length--;

                    finalQuery.Append(");");

                    outputQuery.Append(finalQuery);

                  }

            }
        }

return outputQuery.ToString();}


0

SQL挿入を簡単に生成する信頼できる方法があり、処理中に部分的なパラメーターを変更できます。たとえば、互換性のない構造とフィールドカウントを使用してデータベースに100のデータをコピーするなど、作業の多くに役立ちます。 IntellIJ DataGrip、私が使用する強力なツール。DGは、列または行ごとにWPSオフィスまたはMS Excelからデータを簡単に受信できます。コピー後、DGはSQL挿入としてデータをエクスポートできます

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