Как мне развернуть управляемую хранимую процедуру без использования Visual Studio?
-
02-07-2019 - |
Вопрос
Все, что я прочитал, говорит о том, что при создании управляемой хранимой процедуры щелкните правой кнопкой мыши в 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.
Чтобы было понятно, [YOUR_ASSEMBLY] - это имя, которое вы определили в 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]