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

Проблема: после экспорта таблицы из Excel (содержит пустые ячейки) в MS SQL с помощью макроса, написанного в стороне (подключение к БД; цикл по нужным ячейкам в таблице Excel; передача в функцию значений ячеек полученных в цикле; INSERT INTO в функции; обработка SQL injection) в таблице в MS SQL получаем в пустых ячейках не NULL-значения, а пустоту.

Вопрос: как сделать, чтобы в полученной таблице в MS SQL в пустых ячейках (помечены красными точками на скрине) была не "пустота", а NULL?

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Roman C

Для того, чтобы вставлять с помощью INSERT NULL-значения, нужно их указывать в качестве значений, вместо пустых строк. Либо, используя динамический SQL, исключить нулевые колонки.

Если вставляется пустая строка, то нужно использовать функцию LEN() для проверки пустой строки. После чего, с помощью выражения

CASE WHEN LEN(@InputValue)=0 THEN NULL ELSE @InputValue END

преобразовать ввод значения.

→ Ссылка
Автор решения: Yitzhak Khabinsky

Вот простое решение через 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$]);
→ Ссылка