我工作的公司拥有大型数据库,单个表中有数百万条记录。我编写了一个C#程序,用于在远程服务器之间迁移表。
我首先使用SMO创建所有表而不复制数据,然后在创建所有表之后完成数据插入。
在记录插入期间,由于记录太多,控制台窗口保持空白,直到插入了所有行。由于数据量庞大,这需要很长时间。
我现在想要的是一种在MSSQL导入导出数据向导中打印更新n行的方法
插入部分只是一个简单的insert into select *
查询。
答案 0 :(得分:1)
听起来你可能正在使用SqlCommands,如果是这样的话,那么这是一个样本
using (SqlConnection connection = new SqlConnection(Connection.ConnectionString) )
{
using(SqlCommand command = new SqlCommand("insert into OldCustomers select * from customers",connection))
{
connection.Open();
var numRows = command.ExecuteNonQuery();
Console.WriteLine("Affected Rows: {0}",numRows);
}
}
答案 1 :(得分:0)
你肯定需要查看OUTPUT
条款。 MSDN上有一些有用的例子。
using (SqlConnection conn = new SqlConnection(connectionStr) )
{
var sqlCmd = "
CREATE TABLE #tmp (
InsertedId BIGINT
);
INSERT INTO TestTable
OUTPUT Inserted.Id INTO #tmp
VALUES ....
SELECT COUNT(*) FROM #tmp";
using(SqlCommand cmd = new SqlCommand(sqlCmd,conn))
{
conn .Open();
var numRows = command.ExecuteNonQuery();
Console.WriteLine("Affected Rows: {0}",numRows);
}
}
此外,我建议将存储过程用于此目的。