2014-12-16 5 views
1

, если у меня есть следующая таблица в SQL,Вставка данных в SQL таблице из листа Excel

Item Desc Type Location Quantity Unit_Price 

A  AAA  X  1   0   20.00 
B  BBB  Y  2   0   10.00 
B  CCC  X  2   0   50.00 
C  DDD  Z  1   0   150.00 
C  EEE  Y  3   0   70.00 
D  FFF  Z  3   0   65.00 

И следующий лист Excel

Item Location Quantity 
A   1   1 
B   1   2 
B   2   3 
C   1   40 
C   3   500 
D   3   10 

Как вставить эти величины к SQL чтение таблицы из таблицы Excel?

ответ

0

SQL Server Management Studio может выполнять это через функции импорта/экспорта. Я делаю это с помощью SSMS.

В SSMS щелкните правой кнопкой мыши по базе данных, затем выберите Задачи | Импорт данных.

+0

он берет меня создать таблицу Excel в для SQL как новой таблицы? – Sinnerv

+0

Вы также можете импортировать данные Excel в существующую таблицу. Просто укажите таблицу, в которую вы хотите импортировать. –

0

Сначала вам нужно импортировать лист Excel в свою базу данных. Затем используйте запрос для обновления таблицы.

+0

, создав новую таблицу? – Sinnerv

+1

Да. Импортируйте Excel-лист в новую таблицу. Затем используйте запрос, чтобы обновить реальную таблицу. Что-то вроде этого: UPDATE T1 Set T1.Quantity = Te.Quantity FROM Table1 T1 INNER JOIN TableExcel TE на TE.Item = T1.Item и TE.Location = T1.Location – ericpap

0

Вы можете использовать SQL Server Import and Export Wizard

сначала импортировать данные из Excel во временную таблицу (Это создаст новую таблицу, в которой вы можете упасть позже)

После того, как у вас есть данные в таблице, то вы может обновить уже существующий

Here простой шаг за шагом подход

2

Чтобы сделать это с помощью T-SQL, вы можете следовать этой tutorial в деталях и начать вытягивать данные в временная таблица, как показано в следующем SELECT…INTO заявления:

SELECT * INTO #ProductInfo 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0 Xml; HDR=YES; IMEX=1; 
    Database=C:\DataFiles\ProductData.xlsx', 
    [vProduct$]); 

Используя OPENROWSET в сборке функции для извлечения данных в Excel, где первый аргументом является именем поставщика, который может быть одним из двух поставщиков:

  • Microsoft.Jet.OLEDB.4.0: Использование в 32-разрядных версиях SQL Server для Excel 2003 файлов (или ранее).
  • Microsoft.ACE.OLEDB.12.0: Использование на SQL Server 32-разрядные версии для файлов Excel 2007 (или более поздних версий) или SQL Server 64-разрядные версии для любых файлов Excel.

Второй OPENROWSET аргумент определяет строку провайдера, разделенные точкой с запятой с первой частью с указанием типа файла:

  • Для Excel '97 -2003 (.xls) файлов, используйте Excel 8.0 ,
  • Для файлов Excel 2007-2010 (.xlsx) используйте Excel 12.0 Xml.
  • Для файлов с макросохранением (.xlsm) Excel 2007-2010 используйте Excel 12.0 Макро.
  • Для Excel XML-файлов Excel 2007-2010, не содержащих XML (.xlsb), используйте Excel 12.0.

Вторая часть аргумента указывает путь файла и имя файла. Третий аргумент - это имя таблицы, которую мы хотим получить, с добавлением знака доллара ($) и заключенным в скобки, например, в [Продукты $].

После того, как у вас есть данные во временную таблицу #ProductInfo, вы можете конвертировать, фильтровать данные по мере необходимости, используя внутреннее соединение, а затем обновить поле Количество:

UPDATE 
    p 
SET 
    p.Quantity = temp.Quantity 
FROM dbo.Product AS p 
INNER JOIN #ProductInfo AS temp 
    ON temp.Item = p.Item 
    AND temp.Location = p.Location;