Все, что я прочитал, говорит о том, что при создании управляемой хранимой процедуры нужно щелкнуть правой кнопкой мыши в Visual Studio и выбрать развертывание. Это нормально работает, но что, если я захочу развернуть его за пределами Visual Studio в нескольких разных местах? Я попытался создать сборку с dll проекта, построенного на SQL, и хотя он добавлял сборку, он не создавал процедуры из сборки. Кто-нибудь понял, как это сделать в SQL напрямую, без использования Visual Studio?


Скопируйте файл DLL сборки на локальный диск на различных серверах. Затем зарегистрируйте свою сборку в базе данных:
create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'
... затем вы создаете функцию, ссылающуюся на соответствующий общедоступный метод в DLL:
create proc [YOUR_FUNCTION]
as
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD]
Обязательно используйте скобки [, особенно вокруг NAME_SPACE. Пространства имен могут иметь любое количество точек, но идентификаторы SQL не могут, если части явно не разделены квадратными скобками. Когда я впервые использовал SQL CLR, это было источником многих головных болей.
Чтобы быть ясным, [ВАША_КОБКА] - это имя, которое вы определили в SQL; [NAME_SPACE] - это пространство имен .NET внутри DLL, где находится ваш метод; а [YOUR_METHOD] - это просто имя метода в этом пространстве имен.
Чтобы добавить более подробную информацию / пояснение к ответу @ kcrumley выше:
[NAME_SPACE] - это полное имя типа, а не только пространство имен
- т.е. если ваш класс называется StoredProcedures в пространстве имен My.Name.Space, вы должны использовать [My.Name.Space.StoredProcedures] для части [NAME_SPACE].
Если ваши управляемые хранимые процедуры находятся в классе без определенного пространства имен, вы просто используете простое имя класса (например, [StoredProcedures]).
Я также немного боролся, пытаясь понять, как добавить процедуру с аргументами / параметрами. Итак, вот образец для всех, кто пытается это сделать:
CREATE PROCEDURE [YOUR_FUNCTION]
(
@parameter1 int,
@parameter2 nvarchar
)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION]
Я обнаружил, что это является полезным ресурсом для выполнения всего этого из командной строки.