SQL Server 2008 - выполнять запросы параллельно - PullRequest
1 голос
/ 10 ноября 2011

Есть ли простой способ выполнять запросы параллельно? У меня есть запрос, который имеет что-то вроде этого:

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

и я хочу сделать их параллельно. Я также могу использовать C #, хотя не уверен, как.

Ответы [ 3 ]

3 голосов
/ 10 ноября 2011

Первая идея состоит в том, чтобы иметь отдельные потоки и отдельные соединения, но я думаю, что вы можете управлять им с несколькими соединениями в одном потоке, используя асинхронные обратные вызовы:

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();
}
2 голосов
/ 10 ноября 2011
    List<string> list;
    list.Add("query1");
    list.Add("query2");
    list.AsParallel().ForAll(query => ExecuteQuery(query));
1 голос
/ 10 ноября 2011

Использовать SSIS. Поставь 3 Выполнить задачи sql в потоке управления. Добавить оператор удаления для каждой задачи. Когда пакет будет выполнен, все они будут выполнены одновременно.

Вы также можете создать задание для каждого оператора и запланировать их выполнение одновременно.

Асинхронный обратный вызов также будет работать, но 2 выше легче для тех, кто имеет набор навыков dba для реализации и управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...