Как мне развернуть управляемую хранимую процедуру без использования Visual Studio?

StackOverflow https://stackoverflow.com/questions/124295

  •  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] 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top