19

さまざまなデータインポートシナリオのために、ExcelでSQLステートメント(主にINSERT)を生成するためのトリックはありますか?

私は本当に次のような式を書くのにうんざりしています

="INSERT INTO Table (ID, Name) VALUES (" & C2 & ", '" & D2 & "')"

4

10 に答える 10

32

セミコロンは、最後の二重引用符の内側に閉じパレンを付ける必要があります。文字列を一重引用符で囲む場合は、選択したセルの外側に引用符を追加することを忘れないでください。

(可視性のためにスペースが追加されました-挿入する前に削除してください)

=CONCATENATE("insert into table (id, name) values (",C2,",' ",D2," ');")

別のビューは次のとおりです。

=CONCATENATE("insert into table (id, date, price) values (",C3,",'",D3,"',",B3,");")

于 2008-11-24T21:28:22.073 に答える
2

以前は、Excel で SQL 挿入を作成するために文字列連結メソッドを使用していました。それはうまく機能しますが、少し時間がかかり、「手間がかかる」こともあります。

Excel から挿入を簡単に生成できる Excel アドインを作成しました。

(ページの下部にあるビデオを参照してください) http://www.howinexcel.com/2009/06/generating-sql-insert-statements-in-excel.html

http://www.querycell.com/SQLGenerator.html

http://www.oneclickcommissions.com/excel-statement.html

于 2009-07-09T01:07:22.150 に答える
1

VBA アプローチは次のようになります。文字列を宣言し、次のように SQL ステートメントを割り当てます。

dim SqlString as String
SqlString = "SELECT * FROM %1 WHERE (var=%2)"
SqlString = Replace("%1", "Table_Name")
SqlString = Replace("%2", ""value"")

Excel のアプローチも同様ですが、SUBSTITUTE関数を使用します。

SQL テキストが読みやすくなり、煩わしい & および連結の問題がすべて回避されるため、私はこのアプローチを好みます。はい、余分なセルが必要ですが、監査証跡にはそれだけの価値があります。

于 2011-04-12T15:31:14.787 に答える
1

私はこの痛みを知っています。私はそれについて自分のブログに書くことになりました... 2回
セルの範囲と複数のオプションを連結する UDF を作成しました。これにより、値は常にコンマで区切られますが、必要に応じて一重引用符や括弧を追加することもできます。

したがって、SQL ステートメントの簡単な部分を記述します。

INSERT INTO table
VALUES /*string that we don't want to type by hand*/

また

SELECT *
FROM table
WHERE foo IN (/*another string I don't want to type out*/)

以下のカスタム Excel 関数は、スプレッドシートの範囲内の値を適切な文字列に変換します。

Function SQLConcat(rng As Range, Optional quoted As Boolean = False, Optional parenthesis As Boolean = False) As String
' ***************************************************************
' * Returns a comma separated list for use in SQL IN statements *
' * Params *
' * - rng: Range of cells to concatenate *
' * - quoted: True/False. If true, values are placed inside *
' * of single quotes. Default of false *
' * - parenthesis: Boolean. *
' * Useful for INSERT INTO tbl VALUES(53),(90),(397) *
' * *
' * Author: Christopher J. McClellan *
' * Published under Creative Commons Attribution-Share Alike *
' * http://creativecommons.org/licenses/by-sa/3.0/ *
' * You are free to change, distribute, and pretty much do *
' * whatever you like with the code, but you must give credit *
' * to the original author and publish any derivitive of this *
' * code under the same license. *
' ***************************************************************

Dim tmp As String 'temporary string
Dim row As Long 'first cell is special case
row = 0 'initalize row count
Dim c As Object 'cell
Dim txtwrapperLeft As String, txtwrapperRight As String

If quoted = True And parenthesis = False Then
 txtwrapperLeft = "'"
 txtwrapperRight = "'"
ElseIf quoted = True And parenthesis = True Then
 txtwrapperLeft = "('"
 txtwrapperRight = "')"
ElseIf quoted = False And parenthesis = True Then
 txtwrapperLeft = "("
 txtwrapperRight = ")"
Else
'quoted = false and parenthesis = false
 txtwrapperLeft = ""
 txtwrapperRight = ""
End If

For Each c In rng.Cells
 If row = 0 Then
 tmp = txtwrapperLeft & c.Value & txtwrapperRight
 Else
 tmp = tmp & "," & txtwrapperLeft & c.Value & txtwrapperRight
 End If
 row = row + 1
 Debug.Print tmp
Next c

'return
SQLConcat = tmp
End Function
于 2015-02-16T20:45:27.193 に答える
0

場合によっては、SQL 挿入を構築するのが最も簡単な方法のように思えます。しかし、すぐに飽きてしまいます。それを行うための「スマートな」方法はないと思います (おそらくマクロ/VBA プログラミング以外に)。

Excel を避けて、他のアイデアを検討することをお勧めします。

  • アクセスを使用します(優れたcsvインポートフィルター、次にDBテーブルにリンクし、アクセスに挿入を処理させます)
  • TOAD を使用します (列を組み合わせたり、クリップボードからインポートしたりできるため、インポート機能がさらに優れています)
  • SQL Loader を使用します (少し使いにくいですが、高速で非常に柔軟です)。
于 2008-11-25T17:14:31.837 に答える
0

私は昨日これを行っていました。はい、引用符を正しく取得するのは面倒です。私がしたことの1つは、単一引用符だけを含む名前付きセルを作成することでした。A1 ="'"(等号、二重引用符、一重引用符、二重引用符) と入力し、最下部のツールバーの左側にあるボックスに入力して、このセルに「QUOTE」という名前を付けます。

于 2008-11-25T00:28:48.717 に答える
0

Excel ファイルを csv 形式でエクスポートすることも、代替オプションの 1 つです (Bill Krawin の投稿を参照してください。新しい投稿者のため、まだコメントを追加できません)。ただし、おそらく日付フィールドのフォーマットを yyyy-mm-dd に変更する必要があることに注意してください。そうしないと、日付列がすべて 00/00/00 と表示されます。これは、MySQL が Microsoft Excel とは異なる日付フォーマットを使用するためです。または、OpenOffice を使用して csv ファイルを保存します。

于 2009-06-16T11:42:15.763 に答える
0

ACE/Jet (別名 Access) SQL を使用して、Excel ワークブックからソースにデータをクエリして挿入するのはどうですか? これには、別の Excel スプレッドシートである可能性がある ACE/Jet が必要です。簡単な例を次に示します。

INSERT INTO 
   [ODBC;Driver={SQL Server};SERVER=MYSERVER;DATABASE=MyDatabase;UID=sa;Pwd=mypassword;].MyTable (ID, Name)
SELECT F1, F2
  FROM 
   [Excel 8.0;HDR=NO;IMEX=1;Database=C:\db.xls;].[Sheet1$A1:B4];
于 2009-06-16T13:05:17.187 に答える