Как развернуть управляемую хранимую процедуру без использования Visual Studio? - PullRequest
7 голосов
/ 24 сентября 2008

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

Ответы [ 2 ]

6 голосов
/ 24 сентября 2008

Скопируйте сборочный 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] - это просто имя метода в этом пространстве имен.

2 голосов
/ 20 мая 2010

Для добавления дополнительных подробностей / уточнений к ответу @ 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] 
...