使用SQL Server读取文本文件

时间:2010-01-05 17:30:29

标签: sql-server sql-server-2005 xp-cmdshell

我正在尝试从SQL查询(SQL Server 2005)中读取文本文件,但根本没有任何运气。我用EXEC和xp_cmdshell尝试了各种各样的东西,但都没有用。这是我试图解决这个问题的一般方法:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';

然后我尝试从临时表中选择数据。我经常搜索,我不知道自己错了什么。帮助

5 个答案:

答案 0 :(得分:39)

你的文本文件是什么样的?每行记录一次?

你必须查看BULK INSERT声明 - 它应该类似于:

BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
  CODEPAGE = '1252',
  FIELDTERMINATOR = ';',
  CHECK_CONSTRAINTS
) 

在我的情况下,我正在导入CSV文件 - 但您也应该能够导入文本文件。

来自MSDN文档 - 这是一个样本,希望适用于每行一个字段的文本文件:

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

似乎在我的测试环境中工作正常: - )

答案 1 :(得分:39)

刚刚发现了这个:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents

它会将文件内容作为varchar(max)引入。将SINGLE_CLOB替换为:

对于nvarchar(max),

SINGLE_NCLOB SINGLE_BLOB为varbinary(max)

感谢http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/为此!

答案 2 :(得分:0)

您是需要执行此操作,还是作为正常数据库操作的一部分(即响应触发器,预定事件等)?

无论哪种方式,您最好创建一个SSIS包。

  1. 在SQL Management Studio中,右键单击数据库。
  2. 选择任务|导入数据...
  3. 按照向导说明操作。出现提示时,选择“平面文本文件”作为提供程序。
  4. 我没有使用过dbo.xp_cmdshell(根据你的例子),但我认为捕获输出是个问题。

答案 3 :(得分:0)

如果您想一次将文件读入表中,则应使用BULK INSERT。另一方面,如果您预先逐行解析文件以进行自己的检查,则应该查看此Web:https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/您可能需要激活xp_cmdshell或其他OLE自动化功能。简单的谷歌和脚本将出现。 希望有用。

答案 4 :(得分:-2)

BULK INSERT dbo.temp 

FROM 'c:\temp\file.txt' --- path file in db server 

WITH 

  (
     ROWTERMINATOR ='\n'
  )

它适用于我,但是通过editplus保存为多语言的ansi编码