SQL Server 2008 - 并行执行查询

时间:2011-11-10 01:41:10

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

是否有一种简单的方法可以并行执行查询?我有一个类似这样的查询:

delete from TableA where id = @id
delete from TableB where id = @id
delete from TableC where id = @id
...

我希望并行完成。我也可以使用C#,但不确定如何。

3 个答案:

答案 0 :(得分:3)

第一个想法是拥有单独的线程和单独的连接,但我认为您可以使用异步回调在单个线程中使用多个连接来管理它:

string[] tables = new string[] { "TableA", "TableB", "TableC" ... };
var runningCommands = new List<SqlCommand>();
foreach(var table in tables)
{
  var conn = new SqlConnection(...);
  conn.Open();
  var cmd = new SqlCommand("DELETE FROM " + table + " WHERE id = @id");
  cmd.Parameters.Add(new SqlParameter("@id", id);
  cmd.BeginExecuteNonQuery(); 
  runningCommands.Add(cmd);
}
// now wait for all of them to finish executing
foreach(var cmd in runningCommands)
{
  cmd.EndExecuteNonQuery();
  cmd.Connection.Close();
}

答案 1 :(得分:2)

    List<string> list;
    list.Add("query1");
    list.Add("query2");
    list.AsParallel().ForAll(query => ExecuteQuery(query));

答案 2 :(得分:1)

使用SSIS。将3执行sql任务放在控制流上。为每个任务添加一个删除语句。当包执行时,它们将同时执行。

您还可以为每个语句创建一个作业,并将它们安排在同一时间运行。

异步回调也可以,但上面的2对于有dba技能组的人来说更容易实现和管理。