2008-11-24 4 views

ответ

30

с запятой должен быть внутри последней двойной кавычки закрывающей Paren. При добавлении одиночных кавычек вокруг строки не забудьте добавить их за пределы выбранной ячейки.

(пробелы добавлены для наглядности - удалить перед установкой)

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

Вот другой вид:

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

+0

эй, ребята, я не могу выполнить вышеупомянутые формулы на excel 2010, так как он говорит об ошибке в формуле. abd Я не знаю, как форматировать ячейки (например, c2 и d2) для текста или номера .plz, направьте меня на то же самое –

+0

Он отлично работает с любой версией Excel. Возможно, вам придется отбросить обертку Text() вокруг данных. Как выглядит «окончательный» SQL? –

0

Почему вы генерации SQL в Excel? Легче и намного быстрее экспортировать рабочий лист в виде файла CSV, а затем использовать некоторый инструмент для импорта этого файла в базу данных SQL. Например, заявление MySQL LOAD DATA INFILE.

Извините, что не ответил на ваш вопрос напрямую, и я знаю, что это не решение для всех обстоятельств.

+0

Я «импортирую» из Excel по ряду причин .... - Я не могу просто импортировать данные, поэтому я могу изменять значения с помощью формул Excel. - Пользователи могут изменять данные, тогда как формулы со вставками уже установлены. - Форматы дат и числовых значений часто нуждаются в настройке перед импортом. - ... –

+0

Да, я делаю это, но я сохраняю все формулы на отдельном листе, упорядоченном, чтобы я мог экспортировать этот рабочий лист в формате CSV. Вы можете писать формулы, которые читают ячейки на другом листе в качестве исходных данных. Но YMMV - я понимаю, это может не относиться к вашему делу. –

0

Я делал это вчера, и да, это раздражает, чтобы получить цитаты прямо. Одна вещь, которую я сделал, это иметь именованную ячейку, содержащую только одну цитату. Введите в A1 ="'" (равно, двойная кавычка, одинарная кавычка, двойная кавычка), а затем назовите эту ячейку «QUOTE», набрав ее в поле слева от самой нижней панели инструментов.

0

Иногда создание SQL-вложений кажется самым простым способом. Но вы устали от этого быстро, и я не думаю, что есть «умные» способы сделать это (кроме программирования макросов/VBA).

я укажу вам, чтобы избежать Excel и изучить некоторые другие идеи:

  • использования Access (фильтр импорта большого CSV, а затем ссылку на БД таблицу и пусть Access обрабатывать вставку)
  • использование ЖАБЫ (даже более эффективная функция импорта, так как позволяет смешивать и сопоставлять столбцы и даже импортировать из буфера обмена)
  • использовать SQL Loader (немного сложнее в использовании, но быстро и довольно гибко).
0

Экспорт файла excel в виде csv может быть альтернативным вариантом (см. Сообщение Билла Кравина - как новый плакат, я еще не могу добавить комментарий). Однако будьте предупреждены, что вам, вероятно, придется изменить форматирование полей даты на yyyy-mm-dd, иначе столбцы даты будут отображаться 00/00/00 - это связано с тем, что MySQL использует другую дату fomat для Microsoft Excel. В качестве альтернативы используйте OpenOffice для сохранения файла csv.

0

Как насчет запроса и вставки данных из книги Excel в исходный код с использованием ACE/Jet (a.k.a. Access) SQL? Для этого требуется ACE/Jet, который может быть другой таблицей Excel. Вот краткий пример:

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

Я использовал метод конкатенации String для создания SQL-вставок в Excel. Он может работать хорошо, но может также быть немного трудоемким и «неудобным».

Я создал Excel Add-In, что делает генерирующие Вставки из 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

2

Иногда я использую замену для замены шаблонов в команде SQL вместо того, чтобы пытаться построить команду sql из конкатенации. Скажем, данные находятся в столбцах A & B. Вставьте верхнюю строку. В ячейке C1 месте команда SQL, используя шаблон:

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

Затем в строках 2 место формула первенствуйте:

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

Обратите внимание на использование абсолютной адресации ячейки $C$1, чтобы получить образец. Особенно приятно работать с char или varchar и смешивать одиночные и двойные кавычки в конкатенации. Сравните:

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

Иной вещи, которая укусила меня больше, чем когда-то пытается использовать Excel для обработки некоторых символов или VARCHARS, которые являются числовыми, за исключением того, что они имеют ведущие нули, такие как 007. Excel будет преобразовывает на номер 7.

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 разборчивым и избегает всех раздражающих & и конкатенации проблем. Да, это занимает дополнительную ячейку, но ее ценность для аудита.

1

Я знаю эту боль. Я закончил writing about it on my blog ... twice.
Я создал 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*/) 

И обычай первенствует функция ниже повернет значения в диапазоне таблицы в хорошую строку для вас.

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 
Смежные вопросы