1

我工作的公司拥有大型数据库,单个表中有数百万条记录。我编写了一个在远程服务器之间迁移表的 C# 程序。

我首先使用 SMO 创建所有表而不复制数据,然后在创建所有表后完成数据插入。

在记录插入期间,由于记录太多,控制台窗口保持空白,直到所有行都被插入。由于数据量巨大,这需要很长时间。

我现在想要的是一种打印 n 行更新的方法,就像在 MSSQL 导入导出数据向导中一样。
插入部分只是一个简单的insert into select *查询。

4

2 回答 2

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);
    }
}
于 2012-10-30T08:29:48.180 回答
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);
    }
}

我还建议为此目的使用存储过程。

于 2012-10-30T09:10:26.550 回答