Excel: создание SQL-запроса из огромного Excel

У меня есть огромный Excel с тысячами строк, и мне нужно сгенерировать запрос sql, чтобы вставить данные в базу данных сервера sql.

Формат excel следующий

1 | string1 | another string
    string2
    string3
2 | AAA AAA | ZZZZZZZ
    BB BBBB
    CCCC CC

Первый столбец - это счетчик строк, это не имеет значения. Второй столбец — это группа строк, разделенных разрывными линиями. Третий столбец — это строка, которая должна быть связана с каждой из строк в столбце 2.

Итак, мне нужно сгенерировать следующие запросы:

INSERT INTO SomeTable VALUES ('string1', 'another string')
INSERT INTO SomeTable VALUES ('string2', 'another string')
INSERT INTO SomeTable VALUES ('string3', 'another string')
INSERT INTO SomeTable VALUES ('AAA AAA', 'ZZZZZZZ')
INSERT INTO SomeTable VALUES ('BB BBBB', 'ZZZZZZZ')
INSERT INTO SomeTable VALUES ('CCCC CC', 'ZZZZZZZ')

Понятно, что мне нужно сделать?

К сожалению, мои навыки Excel настолько плохи, что я не могу найти способ сделать это.

Любая помощь?

Большое спасибо!


person empz    schedule 01.03.2010    source источник


Ответы (3)


Ну вот,

Предполагая, что число находится в столбце A, а две строки в столбцах B и C соответственно

Поместите это в ячейку F2

=IF(C2="",C1,C2)

и это в ячейке I2

="INSERT INTO SomeTable VALUES('" & B2 & "','" & F2 & "')"

затем скопируйте формулы вверх и вниз в столбцах F и I.

Надеюсь, вы должны увидеть, как это работает

person CResults    schedule 01.03.2010
comment
Я придумал что-то похожее, но это не работает, потому что генерирует 1 вставку на строку, а в примере первая строка должна генерировать 3 вставки, потому что в столбце 2 есть 3 строки, разделенные линиями разрыва. Если я может разделить столбец2 на разные строки, используя линию разрыва в качестве разделителя, что очень поможет. - person empz; 01.03.2010
comment
Всегда ли количество элементов с разделителями одинаково? Или хотя бы в пределах диапазона? - person CResults; 01.03.2010
comment
К сожалению нет. Может быть от 1 до бесконечности =P - person empz; 01.03.2010
comment
Хорошо, альтернативная идея. Будет ли общая длина ячейки, содержащей строку с разделителями, всегда меньше 4000 символов? Если это так, вы всегда можете создать SP, взять эту ячейку в качестве параметра и разделить ее в SQL. - person CResults; 02.03.2010
comment
Кстати, я понимаю, что бесконечность обычно › 4000 символов, но стоит спросить! - person CResults; 02.03.2010
comment
Ха-ха, да, в данном случае бесконечность ‹ 4000 =P Значит, в Excel нельзя разделить? - person empz; 02.03.2010
comment
Вы можете разделить в Excel из меню «Данные», а затем выбрать «Текст в столбцы» — тогда ячейка будет разделена разделителем. Но я думаю, что в этот момент написание формулы для написания SQL-запроса может быть более проблематичным, чем того стоит. - person CResults; 02.03.2010

Какие БД вы планируете использовать?

Знакомы ли вы с инструментом «ЖАБА»?

person exiter2000    schedule 01.03.2010
comment
БД уже существует, это SQL Server 2005. Нет, я не знаком с этим инструментом. Мне просто нужно сгенерировать эти запросы... или, если бы я мог разделить второй столбец на несколько строк, используя в качестве разделителя строку разрыва, это бы мне очень помогло. - person empz; 01.03.2010
comment
TOAD AFAIK специфичен для Oracle - person CResults; 01.03.2010

Сначала создайте связанный сервер с рассматриваемым листом Excel.

declare @server varchar(100),@dropLogins varchar(20)
select @server='myExcelBook',@dropLogins='droplogins'

Exec sp_dropServer @server,@droplogins=@dropLogins    


    EXEC sp_addlinkedserver @server,
       'ACE 12.0',
       'Microsoft.ACE.OLEDB.12.0',
       'c:\MyExcelBooks\myExcelBool.xls',
       NULL,
       'Excel 12.0'

exec sp_linkedServers

ACE 12.0, Excel 12.0 и Microsoft.ACE.Oledb.12.0 являются именами поставщиков для Excel 2007. Если у вас другая версия Excel, вам необходимо заменить эти литералы правильными. Также необходимо, чтобы Excel был установлен на вашем сервере базы данных.

После того, как вы сделали выше.. вы можете рассматривать каждый рабочий лист в рабочей книге как таблицу

поэтому вставка данных в SomeTable выглядит следующим образом

Insert SomeTable(column1,Column2,Column3)
Select Column1,Column2+Column3,Column3 from myExcelbook..Sheet1$

Обратите внимание, что знак $ должен быть добавлен к листу, на который вы ссылаетесь.

После добавления сервера ссылок вы можете увидеть рабочие листы / и диапазоны в разделе «Серверные объекты» / «LinkedServers» / «myExcelBook/Catalogs/Defautlt/Tables».

person TonyP    schedule 01.03.2010
comment
Извините, а чем это мне поможет? - person empz; 01.03.2010
comment
вы можете сделать это, объединив столбцы в операторе выбора. Я отредактировал ответ, чтобы отразить это - person TonyP; 01.03.2010