Sql server 从远程服务器文件系统上的.xlsx或.csv文件获取数据的OPENROWSET或OPENDATASOURCE示例

Sql server 从远程服务器文件系统上的.xlsx或.csv文件获取数据的OPENROWSET或OPENDATASOURCE示例,sql-server,excel,csv,linked-server,openrowset,Sql Server,Excel,Csv,Linked Server,Openrowset,有大量的示例展示了如何使用和打开对远程SQL Server上的表的查询,以及如何从其他服务器上的文件中获取数据。不幸的是,它们都没有告诉我如何执行我需要执行的特定操作,即使用这些命令之一,使用服务器IP地址和windows登录从远程服务器获取.csv或.xlsx Excel文件,而服务器未安装SQL server实例-仅安装IIS7或8 如果微软的文档没有遗漏一些基本的例子,说明如何以最可能的方式使用他们的工具,那就太好了。尝试40多种不同的参数组合列表并不需要真正的智慧:这只是一种低效的时间浪

有大量的示例展示了如何使用和打开对远程SQL Server上的表的查询,以及如何从其他服务器上的文件中获取数据。不幸的是,它们都没有告诉我如何执行我需要执行的特定操作,即使用这些命令之一,使用服务器IP地址和windows登录从远程服务器获取.csv或.xlsx Excel文件,而服务器未安装SQL server实例-仅安装IIS7或8


如果微软的文档没有遗漏一些基本的例子,说明如何以最可能的方式使用他们的工具,那就太好了。尝试40多种不同的参数组合列表并不需要真正的智慧:这只是一种低效的时间浪费。开发人员有更重要的事情要做,而不是浪费时间试图发现一些“秘密知识”配方,这实际上只是命令参数的一个未正确记录的变体,并假装这与聪明有关

因此,为了缓解我的哲学焦虑,是否有人可以提供一个示例,说明如何使用OPENROWSET或OPENDATASOURCE从.csv文件或excel电子表格中获取/选择内容,使用远程服务器IP地址XXX.XXX.XXX.XXX,如果应该包括端口号,文件系统路径正确附加到该命令或包含在该命令中,以及用户名和密码参数的正确排列。远程服务器上没有SQL server实例-只有IIS和具有windows身份验证的网站。如果您有一个在远程服务器上使用SQL server实例的示例,那就可以了(尽管我认为一些REMOTEDATASOURCE示例已经涵盖了这一点),但我确实想要一个不必在远程web服务器上使用SQL server实例的示例

我知道您可以使用链接服务器进行此操作,但在包含要访问的文件的远程服务器上还有一些额外的负担,在我的情况下,包含excel或.csv文本文件的服务器上甚至没有SQL server实例—只有IIS和网站

(还有-是否有人可以确认您是否可以使用远程服务器上没有SQL Server的链接服务器或其他数据库服务器实例,以及所需的文本数据文件?是仅链接数据库服务器,还是远程服务器可以是windows和web服务器,但没有安装SQL Server的链接服务器?)

很方便,但没有告诉我是否将
SERVERPROPERTY('MachineName')作为nvarchar(128))
可以包含没有SQL server实例的远程windows服务器的IP地址,并且它与访问文本文件无关

非常接近,但帖子中似乎没有积极的结果,并且没有涉及文本文件-只有一个DB查询,因此远程系统安装了SQL server?:

SELECT * 
FROM OPENROWSET('PACISOleDb', '192.168.200.172';'admin';'admin', 'SELECT * FROM DB')
现有的示例很好,但帮助不大:

SELECT *
FROM OPENROWSET('SQLNCLI',
   'DRIVER={SQL Server};SERVER=YourServer;UID=UserID;PWD=Password',
   'select * from sys.sysobjects')
()

()

()

(.我认为这里的{SQL Server}必须是SQL Server名称,而不是远程IP地址?不清楚。)

()

(.同样-没有远程服务器,没有IP服务器地址,没有凭据)

从这里可以选择很多。很棒的博客文章,但对我的特定目的没有用处:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]); 

SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
  'Data Source=C:\DataFiles\EmployeeData1.xlsx;
   Extended Properties=Excel 12.0 Xml')...[vEmployee$];

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=NO;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

SELECT * INTO EmployeeInfo3
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES; IMEX=1;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);
()

MS openrowset文档的命令架构中有一个“|”,表明无法远程执行此操作:

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  
H.访问CSV文件中的数据时不使用格式文件:

    tsql
     Copy
    SELECT * FROM OPENROWSET(
       BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
       SINGLE_CLOB) AS DATA;

所以

比如:

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'|'Microsoft.Jet.OLEDB.4.0'|'PACISOleDb', 'Data Source=XXX.XXX.XXX.XXX\DataFolder\Documents\TestExcel.xls';User ID=MyUID;Password=MyPass;Extended Properties=EXCEL 5.0')...[Sheet1$] ;
或许

(转动拇指-无聊)

我应该放弃使用链接服务器:

EXEC sp_addlinkedserver
  @server = 'ExcelLinkSrv1',
  @srvproduct = 'Excel', 
  @provider = 'Microsoft.ACE.OLEDB.12.0',
  @datasrc = 'C:\DataFiles\EmployeeData1.xlsx',
  @provstr = 'Excel 12.0 Xml; HDR=YES; IMEX=1';
GO
但再说一次,我可以:

@服务器='202.217.XXX.XXX'

?

是的-我知道您通常不会硬编码它,但让我们从SSMS中简单地开始。出于不同的原因,我想避免使用链接服务器。如何使用OPENROWSET或其他OPENDATASOURCE来处理excel电子表格或其他.csv文件


如果您的解决方案或信息有效(而其他人没有首先获得),您可以获得我的所有信誉点或任何东西,因为我不在乎这些东西。

只需使用windows SharePath即可

EXEC sp_addlinkedserver
@server = 'ExcelLinkSrv1',
@srvproduct = 'Excel', 
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = '\\SERVEROTHER\c$\DataFiles\EmployeeData1.xlsx',
@provstr = 'Excel 12.0 Xml; HDR=YES; IMEX=1';

如果您想链接到csv文件,Erland Sommarskog有一篇非常好的文章:,其中讨论了OPENROWSET(大容量)以及BCP和大容量导入的实际使用。正如他详细指出的那样,有很多陷阱,特别是如果您在2017年之前一直使用SQL Server版本的话


csv文件的布局可能不允许您在没有事先处理的情况下使用OPENROWSET(大容量)。这篇文章给出了全部细节。但是,如果可能的话,这是目前将大量文本导入SQL Server数据库的最快方法。

下面是一个使用opendatasource和64位access文本驱动程序进行CSV导入的简单SQL查询

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
                             'Text;Database=D:\TEMP;HDR=YES')..[pdf_attachment#csv]

“如果微软的文档没有遗漏如何以最可能的方式使用他们的工具的基本示例,那就太好了。”我真的,真的,同意这一点。
    tsql
     Copy
    SELECT * FROM OPENROWSET(
       BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
       SINGLE_CLOB) AS DATA;
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',  
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'|'Microsoft.Jet.OLEDB.4.0'|'PACISOleDb', 'Data Source=XXX.XXX.XXX.XXX\DataFolder\Documents\TestExcel.xls';User ID=MyUID;Password=MyPass;Extended Properties=EXCEL 5.0')...[Sheet1$] ;
EXEC sp_addlinkedserver
  @server = 'ExcelLinkSrv1',
  @srvproduct = 'Excel', 
  @provider = 'Microsoft.ACE.OLEDB.12.0',
  @datasrc = 'C:\DataFiles\EmployeeData1.xlsx',
  @provstr = 'Excel 12.0 Xml; HDR=YES; IMEX=1';
GO
EXEC sp_addlinkedserver
@server = 'ExcelLinkSrv1',
@srvproduct = 'Excel', 
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = '\\SERVEROTHER\c$\DataFiles\EmployeeData1.xlsx',
@provstr = 'Excel 12.0 Xml; HDR=YES; IMEX=1';
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
                             'Text;Database=D:\TEMP;HDR=YES')..[pdf_attachment#csv]