Экспорт из Excel в MS SQL (таблица Excel содержит пустые ячейки, которые в MS SQL должны быть NULL)
Проблема: после экспорта таблицы из Excel (содержит пустые ячейки) в MS SQL с помощью макроса, написанного в стороне (подключение к БД; цикл по нужным ячейкам в таблице Excel; передача в функцию значений ячеек полученных в цикле; INSERT INTO
в функции; обработка SQL injection) в таблице в MS SQL получаем в пустых ячейках не NULL-значения, а пустоту.
Вопрос: как сделать, чтобы в полученной таблице в MS SQL в пустых ячейках (помечены красными точками на скрине) была не "пустота", а NULL
?
Ответы (2 шт):
Для того, чтобы вставлять с помощью INSERT
NULL-значения, нужно их указывать в качестве значений, вместо пустых строк. Либо, используя динамический SQL, исключить нулевые колонки.
Если вставляется пустая строка, то нужно использовать функцию LEN()
для проверки пустой строки. После чего, с помощью выражения
CASE WHEN LEN(@InputValue)=0 THEN NULL ELSE @InputValue END
преобразовать ввод значения.
Вот простое решение через T-SQL based on Microsoft ACE OLEDB Provider 16.0
Одно выражение T-SQL!!!
Полный путь, c:\<fully_qualified_path>\input.xlsx
, должен быть доступен с сервера SQL Server.
Этот метод загрузит пустые Excel ячейки как NULLs.
И не забудьте закрыть Excel, иначе файл *.xlsx будет заблокирован.
SQL
INSERT INTO targetTable
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.16.0',
'Excel 12.0 Xml; HDR=NO;
Database=c:\<fully_qualified_path>\input.xlsx',
[Sheet1$]);