Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите новичку советом  [new]
Mudrec
Member

Откуда:
Сообщений: 90
Подскажите, как и в каком направлении разбираться. В экселе есть таблица, из этой таблицы нужно сделать БД в mssql. Таблица довольно большая, состоит из 20 столбцов и 1000 строк. В mssql нужные таблицы я создам, но не в ручную же мне их заполнять, все таки около 1000 строк, тем более я думаю с такой проблемой народ уже сталкивался.
3 янв 15, 11:35    [17082179]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Mudrec,

я из экселя обычно таскаю следующим образом
создаю еще один столбец с формулой типа
= "insert TabName(field1,field2)values(" & A1 & ",'" & A2 & "')"
потом растягиваю эту формулу вниз до конца данных
потом выделяю весь столбец и копипастю в QA

там вроде много способов существует
но мне вот такой удобен
3 янв 15, 11:57    [17082200]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
Mudrec, создаете таблицу в базе со всеми полями, сохраняете xls таблицу в виде текста с разделителями табуляции, при этом порядок полей должен быть строго таким же как в базе. И потом вот таким запросом все заливается:

BULK INSERT MyTable
FROM 'C:\MyXlsFileSavedAsTxt.txt'
WITH(CODEPAGE = 'ACP', FIRSTROW = 2, ROWTERMINATOR='\n')
3 янв 15, 12:36    [17082238]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Mudrec
Подскажите, как и в каком направлении разбираться. В экселе есть таблица, из этой таблицы нужно сделать БД в mssql. Таблица довольно большая, состоит из 20 столбцов и 1000 строк. В mssql нужные таблицы я создам, но не в ручную же мне их заполнять, все таки около 1000 строк, тем более я думаю с такой проблемой народ уже сталкивался.
На базу нажимаете правой кнопкой мышки, находите пункт "импорт"

Там выбираете тип источника "эксель", и следуя подсказкам, указываете, что куда импортировать.

Импортировать лучше "как есть", без изменений, в специально созданную таблицу (этот визард создаст новую таблицу сам), потом из этой таблицы вставите данные в реальную таблицу, с необходимыми конвертациями и преобразованиями
3 янв 15, 12:43    [17082245]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
Mudrec
Member

Откуда:
Сообщений: 90
leov,

Понял, спасибо. Попробовал получилось, вот только не получилось со столбцом "Дата рождения", дату сконвертировало вот так '24910'
3 янв 15, 12:54    [17082259]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
Mudrec
Member

Откуда:
Сообщений: 90
ROLpogo,

Спасибо, сейчас буду пробовать
3 янв 15, 12:56    [17082262]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
Mudrec
Member

Откуда:
Сообщений: 90
alexeyvg,

Спасибо за Ваши советы, уже пробую
3 янв 15, 12:57    [17082265]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Mudrec
leov,

Понял, спасибо. Попробовал получилось, вот только не получилось со столбцом "Дата рождения", дату сконвертировало вот так '24910'
Способ хорош своей универсальностью, подойдёт для любой СУБД

Но придётся писать формулу для кучи колонок (а если их 100?), и нужно конвертить данные. Вот, в частности, для даты и времени, для дробных чисел, строки обрамлять в кавычки и т.д.

Мастером импорта проще, если его освоить. К тому же этот импорт быстрее работает, если вдруг большая таблица.

Кстати, на последнем шаге пакет импорта можно сохранить, и потом им неоднократно пользоваться, если нужно регулярно повторять импорт из файлов с одинаковой структурой.
3 янв 15, 13:19    [17082296]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
А если часто данные надо с разных Excel файлов таскать то можно поставить Access Database Engine (x64 обычно) http://www.microsoft.com/en-us/download/details.aspx?id=13255
потом по рекомендации MS назничить всем полные права доступа на временную папку учётки под которой MSSQL запускается, например
C:\Users\MSSQL$SQLEXPRESS\AppData\Local\Temp
или
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
или
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
и наконец скриптом создать сервер:
----SSMS: run as admin-----
USE master
GO
EXEC sp_configure'show advanced options',1
GO
RECONFIGURE
EXEC sp_configure'Ad Hoc Distributed Queries',1
GO
RECONFIGURE
GO
EXEC sp_MSset_oledb_prop'Microsoft.ACE.OLEDB.12.0','AllowInProcess',1
GO
RECONFIGURE
GO
EXEC sp_MSset_oledb_prop'Microsoft.ACE.OLEDB.12.0','DynamicParameters',1
GO
RECONFIGURE
GO
-- для Excel
EXEC sp_addlinkedserver 
@server='Excel',
@srvproduct='',
@provider='Microsoft.ACE.OLEDB.12.0',
@datasrc='c:\pub\e.xlsx',
@provstr='Excel 12.0'   ---- или @provstr = 'Excel 12.0;IMEX=1;HDR=YES;'

-- для Access
EXEC sp_addlinkedserver 
@server='Access',
@provider='Microsoft.ACE.OLEDB.12.0',
@srvproduct='',
@datasrc='c:\pub\a.accdb'
и заменяй там файлы по необходимости.
3 янв 15, 19:47    [17083027]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
ну и соответственно select*from e...Sheet1$
3 янв 15, 19:51    [17083034]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
тоесть select*from Excel...Sheet1$ или какие там имена...
3 янв 15, 19:52    [17083038]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
vikkiv
тоесть select*from Excel...Sheet1$ или какие там имена...
Вот большой недостаток таких скриптов в том, что надо знать, "какие там имена". Нету команды для получения списка листов (или обращения по номеру), только через OLE :-(

Если листы известны, то такой способ хорош для автоматизации импорта.

Для разовой задачи лучше SSIS (или мастер импорта).
3 янв 15, 20:08    [17083060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
Mudrec
Member

Откуда:
Сообщений: 90
Пытаюсь разобраться как устроена БД, прямого доступа к БД у меня нет . Нашел файлик xml, которым эта база обновлялась. Смотрю по полям как БД обновлялась и не могу понять как она была организована. Например ФИО заносилось в поля F3212, F3213... , потом блок личной информации в поля F32111, F32112, F32113...., следующий блок данных в поля F32160 и т.д. Допустим, понимаю поля F32111-F32160, но почему такой разрыв между F3212 и F32111 в болеее, чем 28 тыс полей? Может это две разные таблицы, т.е. в одной таблице ФИО, а во второй все остальные данные и эти две таблицы связанны между собой по какому то полю?
5 янв 15, 10:26    [17086209]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mudrec
Может это две разные таблицы, т.е. в одной таблице ФИО, а во второй все остальные данные и эти две таблицы связанны между собой по какому то полю?

Вы хотите, чтобы вам по какому то xml файлу рассказали, сколько и каких таблиц в базе данных ? И что означают поля в этих таблицах ?
5 янв 15, 11:18    [17086257]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Mudrec
Может это две разные таблицы, т.е. в одной таблице ФИО, а во второй все остальные данные и эти две таблицы связанны между собой по какому то полю?
Может.

Что бы разобраться в БД, нужно иметь к ней доступ. Других вариантов нет (можно о чём то догадаться, но не более).
5 янв 15, 12:20    [17086346]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку советом  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mudrec
Например ФИО заносилось в поля F3212, F3213... , потом блок личной информации в поля F32111, F32112, F32113...., следующий блок данных в поля F32160 и т.д. Допустим, понимаю поля F32111-F32160, но почему такой разрыв между F3212 и F32111 в болеее, чем 28 тыс полей?
Наименования напомнили мне J.D.Edwards...
5 янв 15, 16:31    [17086868]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить