标签: openrowset

OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"用于链接服务器"(null)"

我正在尝试运行以下语句,但正在接收下面的错误消息.我已经研究过没有尽头的答案,没有一个对我有用.我正在运行Office 365(64位).我已加载Microsoft Access数据库引擎(64位).这是在带有SSDT的Visual Studio 2013以及SQL Server 2012中.我无权访问更改环境或启动参数到SQL Server.任何帮助表示赞赏.

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0', 
    'Excel 12.0;Database=C:\Users\UserName\Folder\SomeFile.xlsx;;HDR=NO;IMEX=1', [Table 1$])
Run Code Online (Sandbox Code Playgroud)
  • 消息7399,级别16,状态1,行1 OLE DB提供程序"Microsoft.ACE.OLEDB.15.0"用于链接服务器"(null)"报告错误.提供商未提供有关错误的任何信息.
  • 消息7303,级别16,状态1,行1无法为链接服务器"(null)"初始化OLE DB提供程序"Microsoft.ACE.OLEDB.15.0"的数据源对象.

这是我尝试过的:

首先,我跑了......

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

紧随其后......没有爱情.

EXEC sys.sp_addsrvrolemember @loginame = N'<<Domain\User>>', @rolename = N'sysadmin';
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1 
GO 
Run Code Online (Sandbox Code Playgroud)

我已经将代码更改为阅读Microsoft.ACE.OLEDB.12.0,因为我已经看到了,仍然没有爱.

我还检查了C:\ Users\MSSQLSERVER\AppData\Local\Temp和C:Windows\ServiceProfiles\NetworkService\AppData\Local的权限,这些权限已授予对以下内容的完全控制权:System,MSSQLSERVER和Administrators,Network Service(on后者).

仍然没有爱.

最后,我尝试更改为32位版本的Microsoft Access数据库引擎,该版本一直无法正常工作.

帮忙,有人吗?

sql openrowset visual-studio-2013

32
推荐指数
4
解决办法
14万
查看次数

在OPENROWSET查询中使用变量

我遇到此查询时遇到问题:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )
Run Code Online (Sandbox Code Playgroud)

给出错误:

'+'附近的语法不正确.

任何人都知道我为什么会收到这个错误?

sql sql-server openrowset sql-server-2008

30
推荐指数
2
解决办法
7万
查看次数

无法为链接服务器null创建OLE DB提供程序Microsoft.Jet.OLEDB.4.0的实例

我试图从我的Table数据导出到Excel通过T-SQL查询.经过一些研究,我想出了这个

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
                        'Excel 8.0;Database=G:\Test.xls;', 
                        'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM   dbo.products 
Run Code Online (Sandbox Code Playgroud)

当我执行上述查询时出现此错误

消息7302,级别16,状态1,行7无法为链接服务器"(null)"创建OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"的实例.

所以通过互联网寻求解决方案,得到以下链接

https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-错误/

在上面的链接中,他们说我们需要管理员在C盘 TEMP文件夹中创建文件夹,因为在文件夹中OPENROWSET创建了一些文件或文件TEMP

我在My Home PC中这样做,我是管理员.仍然得到同样的错误.

SQL SERVER详细信息

Microsoft SQL Server 2016(RC1) - 13.0.1200.242(X64)2016年3月10日16:49:45版权所有(c)Windows 10 Pro 6.3上的Microsoft Corporation企业评估版(64位)(Build 10586 :)

任何解决问题的指针都将受到高度赞赏

更新:我已经配置了Ad Hoc Distributed Queries

执行以下查询

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 
Run Code Online (Sandbox Code Playgroud)

现在我收到了这个错误

消息7438,级别16,状态1,行7 32位OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"无法在64位SQL Server上进行加载.

sql sql-server export-to-excel openrowset

27
推荐指数
1
解决办法
8万
查看次数

从两个不同的服务器数据库INSERT INTO

我试图将testdabse.invoice表的数据复制到basecampdev.invoice表. testdabsebasecampdev在服务器中的本地数据库.

它说,我将数据复制到另一个表的查询不起作用

Invalid object name 'basecampdev.dbo.invoice'.  
Run Code Online (Sandbox Code Playgroud)

我一直在阅读这个文档,但发现很难理解和理解.

这些是从服务器给出的信息

Server type: Database Engine
Server name: server.database.windows.net (this is not the real name)
Authentication: SQL Server Authentication
Login: myusername
Password: mypassword  
Run Code Online (Sandbox Code Playgroud)

如何连接到服务器以便我能够运行此查询

INSERT INTO [basecampdev].[dbo].[invoice]
           ([InvoiceNumber]
           ,[TotalAmount]
           ,[IsActive]
           ,[CreatedBy]
           ,[UpdatedBy]
           ,[CreatedDate]
           ,[UpdatedDate]
           ,[Remarks])
SELECT [InvoiceNumber]
           ,[TotalAmount]
           ,[IsActive]
           ,[CreatedBy]
           ,[UpdatedBy]
           ,[CreatedDate]
           ,[UpdatedDate]
           ,[Remarks] FROM [testdabse].[dbo].[invoice]
Run Code Online (Sandbox Code Playgroud)

屏幕截图

在此输入图像描述

sql sql-server openrowset

19
推荐指数
3
解决办法
14万
查看次数

如何解决"无法找到可安装的ISAM".OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"的错误

我正在尝试使用带有"Microsoft.ACE.OLEDB.12.0"OLE DB提供程序的T-SQL OpenRowset()命令将Excel 2007(.xlsx)文件中的数据导入SQL Server 2008,并且我得到一个持久的"找不到可安装的ISAM"错误.所有硬件都是32位.

[修订于2012年1月10日,试图更加集中于异常]

以下T-SQL语句产生错误:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
    'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)

如果我以"Excel 97-2003"格式(.xls)保存Excel文件并使用较旧的Microsoft.Jet.OLEDB.4.0提供程序导入数据,它可以正常工作.这让我觉得这不是安全或其他环境问题.

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES', 
    'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用Microsoft.ACE.OLEDB.12.0提供程序的*.xls文件时,它应该向后兼容*.xls格式,它再次失败并出现相同的错误:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";', 
    'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)

另外,有趣的是,当我使用SSMS"导入数据..."向导时,它工作正常.我将导入数据向导输出保存为SSIS包,并查看SSIS文件以试图弄清楚它是如何工作的,并且它已成功使用Microsoft.ACE.OLEDB.12.0提供程序.这是SSIS包中的连接字符串:

<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>
Run Code Online (Sandbox Code Playgroud)

我还完成了相关的SQL Server配置以允许OPENROWSET分布式查询:

sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO
Run Code Online (Sandbox Code Playgroud)

如果我还设置了以下*sp_MSset_oledb_prop*值(我在某个帖子中找到)...

USE [master] 
GO 
EXEC …
Run Code Online (Sandbox Code Playgroud)

t-sql oledb excel-2007 isam openrowset

18
推荐指数
1
解决办法
5万
查看次数

如何在CSV导入操作中一步创建和填充表格?

我正在寻找一种快速而又脏的方法将CSV文件导入SQL Server,而无需事先创建表并定义其列.

每个导入的CSV都将导入到自己的表中.

我们不关心数据类型推理.CSV的结构和布局各不相同,并且所有列都有很多列,但我们只关注其中的一些:街道地址和邮政编码.我们只想快速将CSV数据导入SQL数据库并提取相关列.

我想提供FieldTerminator和RowTerminator,将它指向CSV,并让实用程序完成其余工作.有没有办法创建表并使用BULK INSERT和/或OpenRowset(BULK ...)一步一步地填充它?

sql-server bulkinsert sql-server-2000 create-table openrowset

17
推荐指数
2
解决办法
2万
查看次数

将Excel从Azure Blob存储导入Sql Server时出现数据截断问题

我正在尝试将Azure Blob存储中存在的以下Excel文件导入SQL Server

EXCEL文件

在此处输入图片说明

询问

SELECT * 
    FROM OPENROWSET(
        BULK 'container/testfile.xlsx', 
        DATA_SOURCE = 'ExternalSrcImport',
        FORMATFILE='container/test.fmt', FORMATFILE_DATA_SOURCE = 'ExternalSrcImport',
        codepage = 1252,
        FIRSTROW = 1
        ) as data
Run Code Online (Sandbox Code Playgroud)

格式化文件

10.0  
4  
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""  
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""  
Run Code Online (Sandbox Code Playgroud)

格式文件说明

在此处输入图片说明

当我执行查询时,出现以下错误

消息4863,级别16,状态1,行210的行1,列1(部门ID)的大负荷数据转换错误(截断)。

看起来格式文件中的字段终止符不起作用,导入文件有什么想法吗?

sql sql-server azure openrowset azure-blob-storage

12
推荐指数
1
解决办法
205
查看次数

opencelset for excel:我们可以跳过几行吗?

我将使用以下sql从excel读取数据,但有时我需要先跳过几行.例如,真实数据从第5行开始,所以我需要跳过前4行,这是可行的吗?

 SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls',
    'SELECT * FROM [sheet1$]');
Run Code Online (Sandbox Code Playgroud)

sql sql-server openrowset

11
推荐指数
2
解决办法
2万
查看次数

T-SQL:字符串连接问题

我有一组名为GreenLine1.mp3,GreenLine2.mp3等的音频文件我将把它们写成BLOB(我使用的是MS SQL Server'08),这是我的sql请求:

DECLARE @aud AS VARBINARY(MAX)
DECLARE @num AS INT    
-- Load the audio data
SET @num=1
WHILE (@num<38)
BEGIN;

SELECT @aud = CAST(bulkcolumn AS VARBINARY(MAX))
      FROM OPENROWSET(
            BULK
            'C:\Users\Ilya\folder\GreenLine' + CAST(@num AS VARCHAR) + '.mp3',
            SINGLE_BLOB ) AS x

-- Insert the data to the table          
INSERT INTO Mb2.dbo.Audios (Id, [Content])
SELECT NEWID(), @aud
SET @num = @num + 1
END;
Run Code Online (Sandbox Code Playgroud)

我有一个错误:'+'附近的语法不正确,期待','或')'.

如果我试着写

'C:\ Users\Ilya\folder\GreenLine'+ CAST(@num AS VARCHAR)+'.mp3'

变成一个变量并把它放在BULK之后,我在@variable,期望STRING或TEXT_LEX附近得到不正确的语法

t-sql string-concatenation openrowset sql-server-2008

11
推荐指数
2
解决办法
2万
查看次数

SQL Server:无法为链接服务器"(null)"初始化OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"的数据源对象

我正在尝试运行以下查询:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

和:

USE [master]
GO


EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
Run Code Online (Sandbox Code Playgroud)

当我转到"服务器对象" - >"链接服务器" - >"提供商"时,会列出Microsoft.ACE.OLEDB.12.0.

安装了Acess Database Engine x64,所有Office产品都是64位,而我的SQL Server也是64位.

如果重要,所有用户都可以访问Users文件夹中的Temp文件夹.

(这些都是我在这个问题的类似答案中找到的建议) …

sql-server excel openrowset

11
推荐指数
2
解决办法
3万
查看次数