在SQL Server中无需使用OLEDB即可将Excel数据导入临时表

时间:2019-06-18 16:47:21

标签: sql sql-server stored-procedures sql-server-openxml

我正在尝试寻找一种无需使用OLEDB即可将excel数据导入临时表的方法,因为我没有在SQL Server中安装OLEDB,并且由于安全限制我无法安装它。 我知道以下提到的方法,但这对我没有帮助

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 :(得分:0)

使用表变量的超级mcguyver方法。使用Excel工作表上的concat函数为插入部分准备数据。

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');

答案 1 :(得分:0)

这里有3个选项:

1. 从具有管理员权限的计算机上进行导入

听起来您没有能力在SQL Server计算机上安装OLE或ODBC数据提供程序。但是您不必从同一台计算机运行导入。只要您具有有效的凭据和SQL Server的有效网络路径,就可以从任何计算机上运行导入。因此,您可以将Microsoft ACE OLEDB 12.0数据提供程序驱动程序与SQL Server Management Studio一起安装在另一台PC上,在其中复制Excel文件,然后通过向导进行导入。

  1. 尝试使用备用数据提供商驱动程序

您的环境中可能已经安装了用于Excel源的备用数据提供程序驱动程序。例如。 https://www.connectionstrings.com/excel/中提到的Jet OLEDB 4.0驱动程序。连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;
Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
  1. 使用Excel公式构建INSERT语句

您可以使用RBell答案中提到的古老Excel公式技巧:假设您在问题中指定的字段在A1到D1中,请将此公式添加到单元格E1中:

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

然后将这个公式向下复制到数据的所有行中。 Excel将自动更改每一行的单元格引用。请注意,SUBSTITUTE()函数处理数据中的单引号,否则可能会破坏SQL语法。然后,您只需将生成的文本复制并粘贴到SQL窗口中,然后运行它即可。