我试图使用OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”将.xlsx
上传到SQL数据库表,但它会引发以下错误:
错误 '无法为链接服务器“(null)”初始化OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。 OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”返回消息“无法更新。数据库或对象是只读的。”。
我的sql代码是:
'ALTER PROCEDURE [dbo].[spx_ImportFromExcel07]
@SheetName varchar(20),
@FilePath varchar(100),
@HDR varchar(3),
@TableName varchar(50)
AS
BEGIN
DECLARE @SQL nvarchar(1000)
IF OBJECT_ID (@TableName,'U') IS NOT NULL
SET @SQL = 'INSERT INTO ' + @TableName + ' SELECT [Dealer Number],[Dealer Name],[Policy Number],[Policy Status],[Processing Date (ISO)],
[Policy Start Date (ISO)],[Request Cancel/ Amend Date],[Amend/Cancel Type],[Cancel/Amend Text],[Chassis Number],[Registration Number],
[Manufacturer Desc],[Model Desc],[Transmission Desc],[Fuel Type Desc],[Registration Date (ISO) L],[Product Description],
[User Id],[Customer Full Name],[Sub Total],[Tax],[Customer Charge],null,null,null,null FROM OPENDATASOURCE'
ELSE
SET @SQL = 'SELECT * INTO ' + @TableName + ' FROM OPENDATASOURCE'
SET @SQL = @SQL + '(''Microsoft.ACE.OLEDB.12.0'',''Data Source='
SET @SQL = @SQL + @FilePath + ';Extended Properties=''''Excel 12.0;HDR='
SET @SQL = @SQL + @HDR + ''''''')...['
SET @SQL = @SQL + @SheetName + ']'
EXEC sp_executesql @SQL
END'
尝试此步骤后http://www.excel-sql-server.com/
错误是
'OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”不包含表“Sheet1 $”。该表不存在或当前用户没有该表的权限。
检查.xlsx文件上的(Windows)文件访问权限。
创建该文件的(Windows)用户很可能与OLEDB驱动程序用于访问该文件的(Windows)用户不同。当您使用Windows Authentication
登录到sql sever时具有写访问权限时通常会出现这种情况,但在使用SQL Server Authentication
时却没有。
转到Windows资源管理器中的文件并执行以下操作
Security
选项卡中,单击Edit...
Group or user name:
选择组Users(<<your-computer-name>>\Users)
Permissions for Users
检查Allow
Write
OK
以保存更改。这将允许任何用户具有对文件的写访问权,从而启用insert into
链接的服务器表。
这是一个安全问题,您应该对excel模板的文件夹和目标文件夹提供完全访问权限