Одной из проблем является то, как вы получаете CLR (производственные) экземпляры на сервер. Например, в нашей компании есть клиенты, которые не предоставляют нам доступ к своим SQL-серверам, но используют удаленное соединение через SSMS. Так что нет локального пути, из которого вы можете развернуть свою сборку DLL. Решение состоит в том, чтобы загрузить двоичный файл во временную таблицу в виде двоичного двоичного объекта или в виде строки 0x -hex.
Тогда что происходит, когда вы обновляете функцию / сохраненный процесс? Вы не можете обновить какую-либо сборку, от которой зависит другая сборка (я не могу вспомнить, если это происходит только в случае изменения сигнатуры функции ..) Я думаю, что мы всегда отбрасываем все sp / func / assys, прежде чем загружать новую версию любой сборки.
Интеграция системы сборки / эталонной системы идиотская. Когда вы добавляете ссылку на sqlclr, вы должны иметь эту dll, развернутую в SQLS. VS скопирует эту dll из SQLS в каталог obj / sqlclr для этого проекта и затем будет использовать его оттуда. Когда вы затем строите этот проект с помощью системы сборки TFS, у вас должна быть эта dll для успешной сборки. (Существуют обходные пути, связанные с общим сервером SQLS, но ..).
Когда в SQLS развернуты производственные библиотеки DLL, VS не сможет развернуть новые библиотеки DLL. Решение состоит в том, чтобы сократить производство DLLS.
Получение отладчика для работы с SQLCLR - сука. Мы чаще всего сталкиваемся с тем, что имя нашего домена (DOMAIN \ username) не входит в группу «sqladmin» (или что-то подобное). Существует очень мало советов о том, что VS / SQLS говорит вам, что не так и почему он не может достичь точки останова.
Тогда даже когда вы пишете на C #, вы в конечном итоге пишете SQL в жестко закодированных строках. Я не знаю, существуют ли какие-то помощники, чтобы избежать этой ерунды, для sqlclr нет nhibernate / sqlalchemy. Это в основном в SP, которые должны обрабатывать много строк / и т.д. Это меньше влияет на функции.
Это также означает, что если вы используете nhibernate или что-то подобное в вашем слое BL, вы, вероятно, не сможете повторно использовать его в слое sqlclr и будете дублировать классы. Создание экземпляров объектов из SqlReader очень, очень, очень раздражает в 2009 году. То, о чем думали MS, выше меня, невероятная чушь.
В целом, я думаю, что SQLCLR намного лучше, чем T-SQL, но в некоторых ситуациях в конечном итоге просто кодируется T-SQL SP, потому что это меньше беспокоит.