Должен ли я запустить F # в SqlClr? - PullRequest
13 голосов
/ 18 марта 2011

Мне нужно запустить .Net код в Sql, и я пытаюсь выбрать между F # и C #.В настоящее время я делаю все больше и больше кода на F #, поэтому, если он не слишком практичен, я бы хотел, чтобы он был на F #.

Можно ли принудить VS2010 развернуть мои сборки F # (и их ссылки) на Sql Server так же, как это делает проект C #?

Вы бы порекомендовали / не рекомендовали запускать F # в Sql?Почему?

РЕДАКТИРОВАТЬ: Я согласен, что язык лучше, это не вопрос.В основном мне было интересно, есть ли у кого-нибудь опыт использования F # в SqlClr и, в частности, могут ли инструменты предложить простой рабочий процесс для разработки, например, Deploy in VS2010.

РЕДАКТИРОВАТЬ 2: Я экспериментирую с этим, и регистрация вручную совершенно болезненна.Помимо CREATE ASSEMBLY вы должны зарегистрировать каждую функцию, sp, агрегат и т. Д. Вы также должны сначала отбросить их в правильном порядке, если они существуют, чтобы вы не получили DROP ASSEMBLY failed because 'Nibbler' is referenced by object 'Hello'.

У меня тогда возникла идеяиспользовать проект C # в качестве внешнего интерфейса и использовать этот проект для ссылки на проект F #, просто чтобы все это развертывание выполнялось автоматически.Оказывается, вы можете ссылаться только на другие проекты C # / VB Sql Clr или сборки, на которые уже есть ссылки в Sql.Это все еще может упростить развертывание, поскольку все создание / удаление функций и т. Д. Будут обрабатываться автоматически.Затем для развертывания из теста в производство я просто генерировал скрипты из всего, что зарегистрировано в моей тестовой среде.

PS.Я также попытался поиграться с файлом .fsproj, но не с .csproj проекта C # Clr, чтобы развернуть его безрезультатно.

Ответы [ 2 ]

12 голосов
/ 18 марта 2011

Если у вас возникли проблемы с FSharp.Core и другими ссылками в контексте SQL CLR, вы можете попробовать флаг компилятора --standalone , чтобы внешние ссылки были встроены в сборку, развертываемую в SQL.Сервер.

8 голосов
/ 18 марта 2011

Я бы порекомендовал кодировать ваши пользовательские функции / процедуры CLR в F # по той же причине, по которой я бы рекомендовал кодировать почти что угодно в F # (см. Многочисленные вопросы F # против C # по SO). Я не могу придумать причину, чтобы предпочесть C # для чему-либо . Я не пробовал развертывать сборки на SQL Server с использованием VS, но CREATE ASSEMBLY работает просто отлично ... и работает одинаково, независимо от языка программирования.

...