2010-01-05 81 views
23

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

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

然后我尝试从临时表中选择数据。我搜查了很多东西,我无法分辨出我错了什么。帮帮我?

回答

31

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

你必须检查出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' 
    ) 

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

+0

这对我的工作也很好。谢谢! – 2010-01-05 21:55:49

0

您是否需要这样做一次,或作为普通数据库操作的一部分(即响应触发器,预定事件等)?

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

  1. 在SQL Management Studio中,右键单击数据库。
  2. 选择任务|导入数据...
  3. 按照向导说明进行操作。提示时选择“平面文本文件”作为提供者。

我没有使用dbo.xp_cmdshell(根据您的示例),但我想象捕获输出是问题。

-2
BULK INSERT dbo.temp 

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

WITH 

    (
    ROWTERMINATOR ='\n' 
) 

它为我工作,但通过EditPlus的保存到ANSI编码的多语言