Если данные интенсивны с возможностью распараллеливания, вы должны обработать их set ориентированным образом и позволить SQL парализовать процессный знак так, как он считает нужным. Вы не сможете сделать что-то более умное, чем это делает SQL, в отношении разделения доступа к данным для каждого процессора, у него просто есть доступ к информации, которой у вас нет (состояние заполнения пула буферов, ожидаемое время жизни страницы, соответствие CPU / NUMA и т. Д.).
Если ваша обработка ориентирована на скаляр и требует много ресурсов процессора (и даже некоторой обработки, ориентированной на множество), поместите обработку в функцию CLR UDF и снова позвольте выполнению запроса парализовать выполнение вашей функции.
Если ваша обработка имеет какой-либо вид ввода / вывода (например, веб-вызовы), не поместите его в SQL, поместите вне процесса сервера.
Если ваша обработка на самом деле выходит за пределы всех этих категорий, и вы все еще считаете, что могли бы извлечь выгоду из многопоточности, теоретически возможно запускать потоки внутри SQL. Имейте в виду, что хост CLR внутри SQL является , а не вашим обычным хостом CLR (т. Е. Известным хостом приложения или хостом ASP). SQL CLR - третий тип хоста, предлагающий свои собственные примитивы (потоки, блокировка, управление памятью и т. Д.), Расположенные поверх конструкций SOS (рабочие, защелки, клерки памяти и т. Д.). Я настоятельно рекомендую не делать явную многопоточную обработку CLR в SQL.