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

时间:2011-11-03 16:10:39

标签: tsql sql-server-2008

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

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

2 个答案:

答案 0 :(得分:1)

Jet驱动程序仅为32位模式。见MSDN blog。你能用SQL CLR吗?

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

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

答案 1 :(得分:0)

想出来:

方法A:bcp:

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

    exec sp_configure'xp_cmdshell',1 重新配置

  2. 创建用于测试目的的csv文件。我做了一个三列csv平面文件:

  3. A,Brett,1 B,John,2 C,Brian,3

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

      create table Test(value varchar(3),Name varchar(16),ID int)

    2. 从命令shell运行bcp,确保您没有打开文件。

      EXEC xp_cmdshell'bcp Test..Test in“C:\ test \ Test.txt”-c -t,-r \ n -T' GO

    3. 如果您对使用bcp的交换机感到好奇,请使用帮助文件:EXEC xp_cmdshell'bcp /?' !对于我自己,我有这个方法在SQL 2005和FAIL中在SQL 2008和2008 R2中工作,但有以下异常:错误= [Microsoft] [SQL Native Client]在BCP数据文件中遇到意外的EOF。我看了看,看了看,但看起来我的文件采用标准的UTF格式,标准的逗号分隔符和标准的\ n换行SQL bcp不喜欢。然而,我的下一个解决方案立即起作用。

      方法B:批量插入:

      1. 按照相同

      2. 上方的步骤2和3进行操作
      3. 按原样运行批量插入:

        BULK INSERT dbo.Test FROM'C:\ test \ Test.csv' WITH(FIELDTERMINATOR =',',ROWTERMINATOR ='\ n')

      4. 只要您的表数据类型与导入匹配,您应该没问题。与我不得不经常运行向导或打开商业智能开发工作室相比,最简单的表格创建和三行语句非常快,此时我可能只需编写一个自定义C#应用程序。