Це старе питання заслуговує на більш вичерпну відповідь. Деякі з них згадуються в інших відповідях / коментарях тут, інші можуть або не можуть працювати в конкретній ситуації ОП, але можуть працювати для інших, які шукають асинхронно викликати збережені програми з SQL.
Щоб бути абсолютно явним: TSQL не має (сам по собі) можливість запускати інші операції TSQL асинхронно .
Це не означає, що у вас ще багато варіантів:
- Завдання агента SQL : Створіть декілька завдань SQL і або плануйте їх запускати на потрібний час, або запускайте їх асинхронно з "головного управління", що зберігається з використанням програми
sp_start_job
. Якщо вам потрібно відстежувати їхній прогрес програмно, просто переконайтеся, що завдання оновлюють користувальницьку таблицю JOB_PROGRESS (або ви можете перевірити, чи не закінчили вони ще використання функції без документації, xp_sqlagent_enum_jobs
як описано у цій чудовій статті Грегорі А. Ларсена). Вам потрібно створити стільки окремих завдань, скільки потрібно паралельних процесів, навіть якщо вони виконують одну і ту ж збережену процедуру з різними параметрами.
- Пакет SSIS : для складніших асинхронних сценаріїв створіть пакет SSIS з простим потоком завдань розгалуження. SSIS запустить ті завдання в окремих павуках, які SQL виконуватиме паралельно. Викличте пакет SSIS з завдання агента SQL.
- Спеціальна програма : Напишіть просту спеціальну програму на обраній вами мові (C #, Powershell тощо), використовуючи асинхронні методи, що надаються цією мовою. Викликайте збережений протокол SQL у кожному потоці програми.
- OLE Automation : У SQL використовуйте
sp_oacreate
та sp_oamethod
запускайте новий процес, який викликає один одного, зберігається протокол, як описано в цій статті , також Грегорі А. Ларсен.
- Сервіс-брокер : Подивіться на використання Service Broker - хороший приклад асинхронного виконання в цій статті .
- Паралельне виконання CLR : Використовуйте команди CLR
Parallel_AddSql
та Parallel_Execute
як описано в цій статті Аланом Капланом (лише для SQL2005 +).
- Заплановані завдання Windows : перераховано для повноти, але я не прихильник цієї опції.
Якби це я, я, певно, використовував би декілька завдань агента SQL у більш простих сценаріях, а пакет SSIS - у складніших сценаріях.
У вашому випадку виклик завдань SQL Agent звучить як простий і керований вибір.
Останній коментар : SQL вже намагається паралелізувати окремі операції, коли це може *. Це означає, що виконання 2 завдань одночасно замість одного за одним не є гарантією того, що воно закінчиться швидше. Тестуйте уважно, щоб побачити, чи насправді щось покращує чи ні.
У нас був розробник, який створив пакет DTS для одночасного виконання 8 завдань. На жаль, це був лише сервер 4-х процесорів :)
* Якщо припустити налаштування за замовчуванням. Це можна змінити, змінивши максимальну ступінь паралелізму або маску афінності сервера або використовуючи підказку MAXDOP запиту.