如何将文本文件中的每一行插入SQL Server数据库中的单独行?

时间:2013-05-23 19:40:35

标签: c# sql sql-server sql-server-2008 excel

我有一个文本文件,其中包含字典中的单词,如..

ABACA
ABACHI
ABACHISTA
ABACO
ABADESSA
ABADIA
ABALIETA
ABARICA

现在我要做的是将此列表从文本文件插入到SQL Server表中。我不可能手动添加引号。我认为这样做的一种方法是将其复制粘贴到Excel工作表中,然后导入或添加引号,但Excel工作表在工作表中有65k行,此文本文件中包含更多的单词。那么如何轻松完成呢?我正在使用SQL Server 2008。

5 个答案:

答案 0 :(得分:10)

您可以使用T-SQL轻松批量导入包含大量单词的巨大文件 - 只需创建一个类型为varchar的单个列的表,其长度足以保持最长时间字符串,然后批量插入数据。

尝试使用类似这样的T-SQL语句:

CREATE TABLE ImportedWordList(Word VARCHAR(200) )

BULK INSERT ImportedWordList
FROM 'c:\temp\listofwords.txt'
WITH
(ROWTERMINATOR = '\n')
GO

SELECT * FROM dbo.ImportedWordList

在我的有限测试中像魅力一样工作(并且需要大约20秒才能将超过一百万字的列表加载到该表中)。

答案 1 :(得分:4)

当您使用C#标记问题时,请使用:

var allLines = File.ReadAllLines(filepath);

获取所有行,使用foreach运行所有行并使用您想要的任何方式将其插入数据库中,您可以使用:

using (var con = new SqlConnection(connectionString))
{
    foreach (var line in allLines)
    {
        using (var cmd = con.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO [YourTable] ([YourColumn]) VALUES (:val)";

            var param = cmd.CreateParameter();
            param.ParameterName = ":val";
            param.Value = line;

            cmd.ExecuteNonQuery();
        }
    }
}

我没有对此进行过测试,但它很简单,成功并没有太多麻烦。

我认为最好在一个命令中发送所有插入,但这只是一个p.o.c。

答案 2 :(得分:2)

你只需要做一次吗?

Open up management studio and use Import Data

选择Flat File Source作为数据源

答案 3 :(得分:0)

这可能就是一个例子。

string str = null;
StreamReader sr = new StreamReader(YourTextFilePath);
using (var con = new SqlConnection(YourConnectionString))
{
    while ( (str = sr.ReadLine()) != null)
    {
        cmd = new SqlCommand("Insert into table_name values ('" + str + "')", con);
        cmd.ExecuteNonQuery();
        cmd.Dispose();
    }
}

我的代码可能错误/效率低下。所以,随时纠正我。 ;)

答案 4 :(得分:0)

BULK INSERT TABLE_NAME 从'文件路径' WITH (ROWTERMINATOR ='\ n')

* 当你给出路径你应该给服务器路径。其他查询会得到错误*