Импорт данных Excel во временную таблицу без использования OLEDB в SQL Server - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь найти способ импортировать данные Excel во временную таблицу без использования OLEDB, поскольку у меня не установлен OLEDB в SQL Server, и я не могу установить его из-за ограничений безопасности.Я знаю нижеприведенные способы сделать это, но это не поможет мне

Begin Tran
If OBJECT_ID('tempdb..#tblUserImport') IS NOT NULL
Begin
Drop table #tblUserImport
end
Create Table [dbo].[#tblUserImport]
(
id nvarchar(max) NULL,
Name nvarchar(max) NULL,
Job_Title nvarchar(max) NULL,
Work_Email nvarchar(max) NULL
)
INSERT  INTO [dbo].[#tblUserImport]
SELECT  id, Name, Job Title, Work Email
FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=YES;Database=C:\Users\Desktop\Book2.xlsx', 'SELECT * FROM [Sheet1$]');
select * from [#tblUserImport]
Rollback Tran

Я получу упомянутую ниже ошибку, если я выполню openrowset.

Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" не был зарегистрирован.

Возможно ли добиться этого с помощью хранимой процедуры или любым другим способом?

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Вот 3 варианта:

1. Выполните импорт с компьютера, на котором у вас есть права администратора

Похоже, у вас нет возможностиустановите поставщиков данных OLE или ODBC на компьютер с SQL Server.Но вам не нужно запускать импорт с той же машины.Если у вас есть действительные учетные данные и рабочий сетевой путь к вашему SQL-серверу, вы можете запускать импорт с любого компьютера.Таким образом, вы можете установить драйвер поставщика данных Microsoft ACE OLEDB 12.0 на другом ПК вместе с SQL Server Management Studio, скопировать туда файл Excel и затем выполнить импорт с помощью мастера.

Попробуйте альтернативный драйвер поставщика данных

Существуют альтернативные драйверы поставщика данных для источников Excel, которые уже могут быть установлены в вашей среде.Например, драйвер Jet OLEDB 4.0, упомянутый в https://www.connectionstrings.com/excel/. Строка подключения:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;
Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
Используйте формулы Excel для построения операторов INSERT

Вы можете использовать почтенный трюк формулы Excel, на который ссылается в ответе RBell: Предполагая, что поля, указанные в вашем вопросе, находятся в A1через D1 добавьте эту формулу в ячейку E1:

="INSERT INTO #tblUserImport VALUES ('"&SUBSTITUTE(A1, "'", "''")&"', '"&SUBSTITUTE(B1, "'", "''")&"', '"&SUBSTITUTE(C1, "'", "''")&"', '"&SUBSTITUTE(D1, "'", "''")&"');"

Затем вы копируете эту формулу во все строки ваших данных.Excel автоматически изменит ссылки на ячейки для каждой строки.Обратите внимание, что функция SUBSTITUTE() обрабатывает одинарные кавычки в данных, которые в противном случае могут нарушить синтаксис SQL.Затем вы просто копируете и вставляете полученный текст в окно SQL и запускаете его.

0 голосов
/ 18 июня 2019

супер mcguyver способ с использованием табличных переменных.используйте функцию concat на листе Excel для подготовки данных для вставляемой части.

declare @temp1 table (id int identity(1,1),name varchar(255),job_title varchar(255),work_title varchar(255),work_email varchar(255));
insert into @temp1 (name,job_title,work_title,work_email)
values
('John','Electrician','level 3 lightning wizard','john@ex.com'),
('amy','Java Developer','Cyber Coffee Slinger','amy@ex.com');
...