Экспорт данных в Excel не работает в SQL Server

Я использую приведенный ниже код для экспорта данных из SQL Server в Excel:

update openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=E:\..\.xlsx;', 
    'select Column1,Column2,Column3 FROM [Sheet1$]')
set Column1=null,Column2=null,Column3=null

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=E:\..\.xlsx;', 'SELECT * FROM [Sheet1$]') 
    select Column1,Column2,Column3 from table_Name

Я использую 64-разрядную ОС с 64-разрядной Excel 2010.

Этот код работает нормально на 32-битной системе с 32-битной Excel, но в 64-битной системе в первый раз он работает нормально, как и ожидалось, но в следующий раз я хочу установить все записи пустыми и вставить новые записи, и обновление работает, но после обновление, когда я выполняю команду вставки, SQL Server показывает, сколько строк затронуто, но когда я открываю файл, он полностью пуст.

1 ответ

Только службы интеграции SQL Server (SSIS) поддерживают экспорт в книгу Microsoft Excel.

Пользователи Microsoft Excel могут открыть CSV файл так же, как собственный файл Excel.
Так что экспорт в CSV Файлы подходят для большинства случаев, и вы можете использовать простые утилиты командной строки вместо служб интеграции SQL Server (SSIS).

Недостатком экспорта в книгу Excel или файл CSV является то, что пользователь каждый раз получает новый файл и теряет свои изменения.


Обратите внимание на следующие советы:

  • Поля даты и времени должны соответствовать форматам, указанным выше, чтобы их нельзя было понять Microsoft Excel.
  • Текстовые поля должны быть заключены в кавычки, иначе столбец данных запятая разделяет поля.
  • Первые два символа CSV-файла не должны содержать заглавных букв "L" или "D", в противном случае Microsoft Excel выводит сообщение об ошибке "SYLK: неверный формат файла", когда пользователи открывают файл.

Последняя команда:

'-S . => Defines the localhost server
'-d AzureDemo => Defines the database (ex. AzureDemo)
'-E => Defines the trusted connection. Instead you can use user credentials: -U Username -P Password
'-s, => Defines the comma as a column separator. Use -s; for semicolon.
'-W  => Removes trailing spaces.
'-Q "SELECT * FROM ..." => Defines a command line query and exit
'ExcelTest.csv => Outputs the result to file ExcelTest.csv
'findstr /V /C:"-" /B => removes strings like "--,-----,--------,--------".
'
sqlcmd -S . -d AzureDemo -E -s, -W -i ExcelTest.sql | findstr /V /C:"-" /B > ExcelTest.csv

Замечания:
sqlcmd У утилиты нет переключателя для изменения NULL в empty значение!
Использовать ISNULL функция в запросе SQL, чтобы изменить NULL в '',
Или добавить | replace-null.exe > ExcelTest.csv в конце текста команды.

Другие вопросы по тегам