Sql server 从CSV文件打开行集

Sql server 从CSV文件打开行集,sql-server,csv,Sql Server,Csv,我正在尝试读取位于网络共享文件夹上的CSV文件,但以下代码出现错误: SELECT * INTO #TempTbl FROM OPENROWSET ('SQLNCLI11', 'ServerName = <username>;Trusted_Connection=yes;', 'Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=\\sharedpath\DIR path\; SELECT * FROM CSV_File

我正在尝试读取位于网络共享文件夹上的CSV文件,但以下代码出现错误:

SELECT * INTO #TempTbl
FROM OPENROWSET
('SQLNCLI11',
'ServerName = <username>;Trusted_Connection=yes;',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=\\sharedpath\DIR path\;
SELECT * FROM CSV_File.csv) as Test
这是什么意思?此错误消息是否表示我的脚本中有错误,或者是访问权限问题?当我不再使用CSV驱动程序时,我能够使用相同的openrowset连接从服务器上的表读取数据


我不知道如何让这个openrowset读取CSV文件。有线索吗?您认为这与服务器帐户没有访问权限有关吗?我正在使用的帐户没有访问共享文件夹的权限?

您使用了错误的提供程序。您的连接字符串是为连接到服务器而编写的(某种程度上)。根据上的示例E,您应该为OPENROWSET使用批量选项

虽然您需要按照说明创建一个格式文件,但它看起来是这样的


首先,我很确定你不应该在连接字符串完成之前关闭它的单撇号。确切位置?在信任连接之后和之后=是;不,这只是编辑器中的一个类型。我签入了SQL它看起来很好,我不能使用格式文件,因为我希望它位于一个存储过程中,该存储过程将每晚运行以填充临时表,然后从临时表填充主表。如果文件格式始终相同,则生成格式文件是一次性的。您只需在第一次循环时定义它。如果格式发生变化,那么您的问题就会变得非常复杂。它每次都在变化,我无法预测变化。关于如何解决这个问题,或者至少如何自动创建fmt文件,我想知道的是,您的建议是动态地确定您的元数据是什么。这正是要求。我甚至可以处理这个问题的唯一方法是将所有数据导入一个大列,然后编写T-SQL进行解析。然而,这不是我选择的工具。
SELECT * INTO #TempTbl
FROM OPENROWSET
('SQLNCLI11',
--'ServerName = <username>';Trusted_Connection=yes;',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=\\sharedpath\DIR path\;
SELECT * FROM CSV_File.csv) as Test
OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "Invalid authorization specification".
OLE DB provider "SQLNCLI11" for linked server "(null)" returned message "Invalid connection string attribute".
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "SQLNCLI11" for linked server "(null)" reported an error. Authentication failed.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "SQLNCLI11" for linked server "(null)". 
SELECT * 
FROM OPENROWSET( BULK '\\sharedpath\DIR path\CSV_File.csv', 
                 FORMATFILE = '\\sharedpath\DIR path\CSV_format.fmt');