我有一个文本文件,其中包含字典中的单词,如..
ABACA
ABACHI
ABACHISTA
ABACO
ABADESSA
ABADIA
ABALIETA
ABARICA
现在我要做的是将此列表从文本文件插入到SQL Server表中。我不可能手动添加引号。我认为这样做的一种方法是将其复制粘贴到Excel工作表中,然后导入或添加引号,但Excel工作表在工作表中有65k行,此文本文件中包含更多的单词。那么如何轻松完成呢?我正在使用SQL Server 2008。
答案 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)
答案 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')
* 当你给出路径你应该给服务器路径。其他查询会得到错误*