2008-11-24 83 views
17

Bạn có bất kỳ thủ thuật nào để tạo các câu lệnh SQL, chủ yếu là INSERT, trong Excel cho các tình huống nhập dữ liệu khác nhau không?Thủ thuật để tạo các câu lệnh SQL trong Excel

Tôi thực sự cảm thấy mệt mỏi viết công thức với như

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

Trả lời

30

Các dấu chấm phẩy cần phải được bên trong dấu nháy kép cuối cùng với dấu ngoặc đóng cửa. Khi thêm dấu nháy đơn xung quanh một chuỗi, hãy nhớ thêm chúng vào bên ngoài ô đã chọn của bạn.

(số lượng gia tăng đối với tầm nhìn - loại bỏ trước khi chèn)

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

Dưới đây là một quan điểm:

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

+0

hey guys Tôi không thể thực hiện các công thức được đề cập ở trên trên excel 2010, vì nó nói lỗi trong công thức. abd tôi không biết làm thế nào để định dạng các tế bào (như c2 và d2) cho văn bản hoặc số .plz hướng dẫn tôi trên cùng một –

+0

Nó hoạt động tốt với bất kỳ phiên bản nào của Excel. Bạn có thể cần phải thả một wrapper Text() xung quanh dữ liệu. SQL "cuối cùng" trông như thế nào? –

0

Tại sao các bạn tạo SQL trong Excel? Xuất một trang tính dưới dạng tệp CSV dễ dàng hơn và nhanh hơn và sau đó sử dụng một số công cụ để nhập tệp đó vào cơ sở dữ liệu SQL. Ví dụ: tuyên bố LOAD DATA INFILE của MySQL.

Xin lỗi vì không trả lời trực tiếp câu hỏi của bạn và tôi biết rằng đây không phải là giải pháp cho mọi trường hợp.

+0

Tôi "nhập" từ Excel vì nhiều lý do .... - Tôi không thể chỉ nhập dữ liệu, vì vậy tôi có thể sửa đổi các giá trị bằng công thức Excel. - Người dùng có thể sửa đổi dữ liệu trong khi các công thức có chèn đã được đặt sẵn. - Định dạng ngày tháng và giá trị số thường cần tinh chỉnh trước khi nhập. - ... –

+0

Vâng, tôi làm điều đó nhưng tôi giữ tất cả các công thức trên một trang tính riêng biệt, được sắp xếp để tôi có thể xuất trang tính đó dưới dạng CSV. Bạn có thể viết công thức đọc các ô trong trang tính khác dưới dạng dữ liệu nguồn của chúng. Nhưng YMMV - Tôi hiểu điều này có thể không áp dụng cho trường hợp của bạn. –

0

Tôi đã làm điều này ngày hôm qua, và có, nó gây phiền nhiễu để có được dấu ngoặc kép đúng. Một điều tôi đã làm là có một ô được đặt tên chỉ chứa một trích dẫn duy nhất. Nhập vào A1 ="'" (bằng, dấu ngoặc kép, dấu nháy đơn, dấu ngoặc kép) và sau đó đặt tên ô này là "QUOTE" bằng cách nhập vào ô bên trái của thanh công cụ thấp nhất.

0

Đôi khi, xây dựng SQL Chèn điều này có vẻ là cách dễ nhất. Nhưng bạn cảm thấy mệt mỏi với nó nhanh, và tôi không nghĩ rằng có những cách "thông minh" để làm điều đó (ngoài việc có thể là macro/lập trình VBA).

tôi muốn chỉ cho bạn để tránh Excel và khám phá một số ý tưởng khác:

  • sử dụng Access (bộ lọc nhập khẩu lớn csv, sau đó liên kết đến DB Bảng và để truy cập xử lý chèn)
  • sử dụng cóc (thậm chí tính năng nhập tốt hơn vì nó cho phép bạn trộn và đối sánh các cột và thậm chí để nhập từ bảng tạm)
  • sử dụng Trình tải SQL (một chút khó sử dụng, nhưng nhanh và khá linh hoạt).
0

Xuất tệp excel dưới dạng csv có thể là tùy chọn thay thế (xem bài đăng của Bill Krawin - dưới dạng áp phích mới, tôi chưa thể thêm nhận xét). Tuy nhiên được cảnh báo rằng bạn có thể sẽ phải thay đổi định dạng của trường ngày thành yyyy-mm-dd, nếu không thì các cột ngày sẽ hiển thị 00/00/00 - điều này là do MySQL sử dụng một ngày tháng khác với Microsoft Excel. Hoặc sử dụng OpenOffice để lưu tệp csv.

0

Làm thế nào để truy vấn và chèn dữ liệu từ sổ làm việc Excel vào nguồn bằng cách sử dụng truy vấn ACE/Jet (a.k.a. Access)? Điều này đòi hỏi một ACE/Jet có thể là một bảng tính Excel khác. Dưới đây là ví dụ nhanh:

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]; 
2

Tôi đã sử dụng phương pháp ghép nối chuỗi để tạo chèn SQL trong Excel. Nó có thể hoạt động tốt nhưng cũng có thể tốn ít thời gian và 'khó sử dụng'.

Tôi tạo ra một Excel Add-In mà làm cho việc tạo ra Chèn từ Excel dễ dàng hơn:

(xem video ở dưới cùng của trang) 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

2

Đôi khi tôi sử dụng thay thế để thay thế các mẫu trong lệnh SQL thay vì cố gắng xây dựng lệnh sql ra khỏi kết nối. Giả sử dữ liệu nằm trong Cột A & B. Chèn một hàng trên cùng. Ở vị trí tế bào C1 lệnh SQL sử dụng mẫu:

insert into table t1 values('<<A>>', '<<B>>') 

Sau đó, trong hàng 2 nơi công thức excel:

=SUBSTITUTE(SUBSTITUTE($C$1, "<<A>>", A2), "<<B>>", B2) 

Lưu ý việc sử dụng các tế bào tuyệt đối quyết $C$1 để có được mô hình. Đặc biệt là tốt đẹp khi làm việc với char hoặc varchar và phải trộn các dấu nháy đơn và kép trong phần nối. So sánh với:

=concatenate("insert into table t1 values '", A2, "', '", B2, "')" 

Một điều khác mà đã cắn tôi nhiều hơn một lần đang cố gắng sử dụng excel để xử lý một số ký tự hoặc varchars có số, trừ trường hợp họ có số không hàng đầu như 007. Excel sẽ chuyển đổi sang số 7.

1

cách tiếp cận VBA sẽ là: tuyên bố chuỗi của bạn và gán lệnh SQL của bạn như cách tiếp cận này

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

Excel cũng tương tự, nhưng sử dụng SUBSTITUTE chức năng.

Tôi thích cách tiếp cận này vì nó làm cho văn bản SQL dễ đọc và tránh tất cả các vấn đề gây phiền nhiễu & và ghép nối. Có, nó có thêm một tế bào, nhưng nó có giá trị cho đường mòn kiểm toán.

1

Tôi biết nỗi đau này. Tôi đã kết thúc writing about it on my blog ... twice.
Tôi đã tạo một UDF kết hợp một dải ô cùng với một số tùy chọn. Điều này sẽ luôn luôn phân tách các giá trị, nhưng cũng sẽ tùy ý thêm dấu nháy đơn và/hoặc dấu ngoặc đơn khi cần thiết.

Vì vậy, bạn viết phần dễ dàng của câu lệnh sql.

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

hoặc

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

Và tùy chỉnh trội chức năng dưới đây sẽ lần lượt các giá trị trong một phạm vi bảng tính vào một chuỗi tốt đẹp cho bạn.

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 
Các vấn đề liên quan