40

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

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

然后我尝试从临时表中选择数据。我已经搜索了很多,但我不知道我做错了什么。帮助?

4

4 回答 4

58

刚发现这个:

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

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

SINGLE_NCLOB对于 nvarchar(max) SINGLE_BLOB对于 varbinary(max)

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

于 2011-10-20T16:46:21.037 回答
46

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

您必须查看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'
      )

似乎在我的测试环境中工作得很好:-)

于 2010-01-05T17:59:50.550 回答
0

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

于 2014-12-16T18:03:06.737 回答
0
BULK INSERT dbo.temp 

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

WITH 

  (
     ROWTERMINATOR ='\n'
  )

它对我有用,但通过editplus保存为多语言的ansi编码

于 2016-07-13T01:33:41.883 回答