-1

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

ABACA
ABACHI
ABACHISTA
ABACO
ABADESSA
ABADIA
ABALIETA
ABARICA

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

4

5 回答 5

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 秒才能将超过一百万个单词的列表加载到该表中)。

于 2013-05-23T20:30:49.250 回答
4

当您使用 C# 标记您的问题时,只需使用:

var allLines = File.ReadAllLines(filepath);

要获取所有行,请使用 a 在所有行上运行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();
        }
    }
}

我还没有测试过,但它很简单,没有太多麻烦就可以成功。

我猜最好在一个命令中发送所有插入,但这只是一个 poc

于 2013-05-23T19:53:26.960 回答
2

你只需要这样做一次吗?

打开管理工作室并使用导入数据

选择平面文件源作为数据源

于 2013-05-23T19:49:45.997 回答
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();
    }
}

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

于 2013-05-23T20:10:48.837 回答
0

BULK INSERT TABLE_NAME FROM 'file path' WITH (ROWTERMINATOR = '\n')

*当你给出路径时你应该给出服务器路径。否则查询会出错 *

于 2013-10-04T09:26:36.800 回答