我正在尝试运行以下语句,但正在接收下面的错误消息.我已经研究过没有尽头的答案,没有一个对我有用.我正在运行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)
这是我尝试过的:
首先,我跑了......
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数据库引擎,该版本一直无法正常工作.
帮忙,有人吗?
我遇到此查询时遇到问题:
SELECT *
FROM OPENROWSET(
'SQLNCLI',
'DRIVER={SQL Server};',
'EXEC dbo.sProc1 @ID = ' + @id
)
Run Code Online (Sandbox Code Playgroud)
给出错误:
'+'附近的语法不正确.
任何人都知道我为什么会收到这个错误?
我试图从我的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"的实例.
所以通过互联网寻求解决方案,得到以下链接
在上面的链接中,他们说我们需要管理员在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上进行加载.
我试图将testdabse.invoice
表的数据复制到basecampdev.invoice
表.
testdabse
是basecampdev
在服务器中的本地数据库.
它说,我将数据复制到另一个表的查询不起作用
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)
屏幕截图
我正在尝试使用带有"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) 我正在寻找一种快速而又脏的方法将CSV文件导入SQL Server,而无需事先创建表并定义其列.
每个导入的CSV都将导入到自己的表中.
我们不关心数据类型推理.CSV的结构和布局各不相同,并且所有列都有很多列,但我们只关注其中的一些:街道地址和邮政编码.我们只想快速将CSV数据导入SQL数据库并提取相关列.
我想提供FieldTerminator和RowTerminator,将它指向CSV,并让实用程序完成其余工作.有没有办法创建表并使用BULK INSERT和/或OpenRowset(BULK ...)一步一步地填充它?
sql-server bulkinsert sql-server-2000 create-table openrowset
我正在尝试将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从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) 我有一组名为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附近得到不正确的语法
我正在尝试运行以下查询:
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文件夹.
(这些都是我在这个问题的类似答案中找到的建议) …
openrowset ×10
sql-server ×7
sql ×6
t-sql ×2
azure ×1
bulkinsert ×1
create-table ×1
excel ×1
excel-2007 ×1
isam ×1
oledb ×1