使用SQL Server读取文本文件

Mar*_*lly 33 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';
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 41

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

您必须查看BULK INSERT语句 - 它应该类似于:

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

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

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

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )
Run Code Online (Sandbox Code Playgroud)

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


小智 41

刚发现这个:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents
Run Code Online (Sandbox Code Playgroud)

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

SINGLE_NCLOBfor varvarary(max)的nvarchar SINGLE_BLOB(max)

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