Как запустить хранимые процедуры sql server параллельно?

Я хочу сделать что-то вроде:

exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3

Я могу сделать это в dts. Есть ли способ сделать это в transact sql? Или есть способ сделать это с помощью пакетного сценария (например, vbs или powershell)?

4 ответов


sp _ start _ job

Я делаю аналогичную вещь на данный момент, и единственный способ, которым я нашел, чтобы избежать использования SSIS или некоторой внешней оболочки, - это разделить мою процедуру загрузки на "потоки" вручную, а затем запустить одно основное задание sqlagent, которое, в свою очередь, выполняет столько sp _ start _ job, сколько у меня есть потоков. С этого момента все они работают автономно.

Это не совсем то, что мы ищем, но результат тот же. Если проверить состояние задания для подзадач, вы также можете реализовать условный запуск sproc 3.

какой смысл в 8 ядрах, если мы не можем использовать их все сразу?


вы можете создать хранимую процедуру CLR, которая (используя C#) вызовет первые два в своих собственных потоках, а затем заблокирует, пока оба не будут завершены... затем запустите третий.

вы можете использовать CLR sprocs в вашей ситуации? Если да, я отредактирую этот ответ, чтобы получить более подробную информацию.


вам абсолютно необходимо, чтобы оба SPs выполнялись параллельно?

с помощью простых операторов CRUD в одном SP я обнаружил, что SQL S. Очень хорошо определяет, какой из них можно запускать параллельно и делать это. Я никогда не видел, чтобы SQL S. запускал 2 SPs параллельно, если оба вызываются последовательно из оператора T-SQL, даже не знаю, возможно ли это.

теперь, действительно ли DTS выполняет их параллельно? Может быть, он просто выполняет их последовательно, затем вызывает 3-й SP после успешного завершения последнего.

Если он действительно запускает их параллельно, вероятно, вам следует придерживаться DTS, но тогда я хотел бы знать, что он делает, если у меня есть вызов пакета DTS, скажем, 10 сверхмощных SPs параллельно... Возможно, мне придется сделать несколько тестов, чтобы узнать это самому: D


вы можете использовать SSIS. Преимущества этого заключаются в том, что пакет можно хранить в SQL Server и легко там.

из PowerShell или любого внешнего языка сценариев можно использовать командную строку SQL osql или sqlcmd. Этот метод также можно использовать для его планирования на сервере SQL, также используя xp_cmdshell.