Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 通过SQL 2008 R2 SSMS 64位查询csv或excel文件的最佳方法?_Tsql_Sql Server 2008 - Fatal编程技术网

Tsql 通过SQL 2008 R2 SSMS 64位查询csv或excel文件的最佳方法?

Tsql 通过SQL 2008 R2 SSMS 64位查询csv或excel文件的最佳方法?,tsql,sql-server-2008,Tsql,Sql Server 2008,大家好,我在SQL 2008中有一些证书,但我绝对不是大师。我很好奇,如果我的目标是在SSMS中查询我桌面上的CSV或Excel文件,该怎么做?在任何人提到Openrowset并通过sp_configure打开它之前,我已经尝试过了,但在尝试“Microsoft.Jet.OLEDB.4.0”驱动程序、“MSADSAL”驱动程序或其其他迭代时,它似乎不起作用。它给出了一些关于服务器不允许为null的错误,或者这只能在单线程模式下运行。我读过这篇文章,很多人都说你必须运行32位或类似的版本才能得到它

大家好,我在SQL 2008中有一些证书,但我绝对不是大师。我很好奇,如果我的目标是在SSMS中查询我桌面上的CSV或Excel文件,该怎么做?在任何人提到Openrowset并通过sp_configure打开它之前,我已经尝试过了,但在尝试“Microsoft.Jet.OLEDB.4.0”驱动程序、“MSADSAL”驱动程序或其其他迭代时,它似乎不起作用。它给出了一些关于服务器不允许为null的错误,或者这只能在单线程模式下运行。我读过这篇文章,很多人都说你必须运行32位或类似的版本才能得到它。让我困惑的是,我可以使用Openrowset的“BULK”方法,然后选择“Single_Clob”,但是我得到一个逗号分隔的字符串,然后我必须解析出来


我真正的问题是,在64位版本的SSMS 2008 R2中,有没有一种简单的方法可以快速查询CSV或Excel文件?

Jet驱动程序只有32位模式。看这个。你能用吗

我们通常使用SSIS包将CSV/XLS数据导入表中进行查询,这与右键单击并选择导入时SSMS自动为您执行的操作类似

您遇到的问题是Excel和CSV不是数据库。要查询它们,必须将它们放入数据库管理系统。

解决了这个问题:

方法A:bcp:

确保xp_cmdshell处于启用状态。如果您在企业公司的生产环境中,出于安全原因,这可能不是一个选项。您可以始终使用BETA或QA环境将数据放在第一位,并希望设置链接服务器

exec sp_配置“xp_cmdshell”,1 重新配置

为测试目的创建csv文件。我制作了一个三列csv平面文件:

A、 布雷特,1岁 B、 约翰,2岁 C、 布莱恩,3岁

创建与此处显示的数据类型匹配的临时表或永久表:

创建表测试值varchar3,名称varchar16,ID int

从命令shell运行bcp,确保文件未打开

EXEC xp\u cmdshell“bcp Test..Test在C:\Test\Test.txt-C-t,-r\n-t中” 去

如果您对使用bcp的交换机感兴趣,请使用帮助文件:EXEC xp\u cmdshell“bcp/?” ! 就我自己而言,我让这个方法在SQL 2005中工作,在SQL 2008和2008 R2中失败,但有一个例外:错误=[Microsoft][SQL Native Client]在BCP数据文件中遇到意外的EOF。我看了又看,但似乎我的文件是标准UTF格式,带有标准逗号delimeter和标准行馈送SQL bcp,不喜欢。然而,我的下一个解决方案马上就奏效了

方法B:批量插入:

按照上述步骤2和3进行操作

按如下方式运行批量插入:

大容量插入dbo.Test 来自“C:\test\test.csv” 使用FIELDTERMINATOR=',ROWTERMINATOR='\n'


只要您的表数据类型与导入匹配,就可以了。ulimtary一个简单的表创建和一个三行语句对我来说是相当快的,而不是必须经常运行向导或打开Business Intelligence Development Studio,在这一点上,我还不如编写一个定制的C应用程序。

是的,我做SSIS,但SSIS有一个没有人想到的问题。列可能会不时更改,因此您无法始终实际使用SSI。我想知道是否有人认为XP\U CmdShell?可能是错误的名称可能与bcp结合使用?我以为有人在某处写过,但我记不起来了。我知道很多时候我不需要整个表,只需要某人给我的列表中的一部分。如果你的列发生了变化,你必须更新你的SQL查询。当列更改时,您只需更新SSIS架构。您将很难实现这一点,因为即使您标识了N个标准模式源,也无法获得一致的源文件???您几乎可以在每个视图、表函数或表中执行“选择*自”。我的意思是源文件可能会从第2列更改为第3列或第4列,等等。。。。数据类型也是如此。我希望有一个与OpenRowSet相当的64位代码来解释这个问题。有人知道用BCP执行命令shell吗?