2008-09-23 22 views
7

Todo lo que he leído dice que al hacer un procedimiento almacenado administrado, haga clic con el botón derecho en Visual Studio y elija implementar. Eso funciona bien, pero ¿qué sucede si quiero implementarlo fuera de Visual Studio en varias ubicaciones diferentes? Traté de crear el ensamblado con el dll, el proyecto construido en SQL, y mientras agregaba el ensamblado, no creó los procedimientos fuera del ensamblaje. ¿Alguien ha descubierto cómo hacer esto en SQL directamente, sin usar Visual Studio?¿Cómo implemento un procedimiento almacenado administrado sin usar Visual Studio?

Respuesta

6

Copie el archivo DLL de conjunto en la unidad local en sus diversos servidores. A continuación, registrar su montaje con la base de datos:

create assembly [YOUR_ASSEMBLY] 
from '(PATH_TO_DLL)' 

... a continuación, crear una función de referencia al método público apropiado en el archivo DLL:

create proc [YOUR_FUNCTION] 
as 
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD] 

Asegúrese de utilizar los [corchetes, especialmente alrededor de la NAME_SPACE. Los espacios de nombre pueden tener cualquier número de puntos, pero los identificadores de SQL no pueden, a menos que las partes estén explícitamente separadas por corchetes. Esta fue una fuente de muchos dolores de cabeza cuando estaba usando SQL CLR por primera vez.

Para ser claros, [YOUR_ASSEMBLY] es el nombre que definió en SQL; [NAME_SPACE] es el espacio de nombres de .NET dentro de la DLL donde se puede encontrar su método; y [YOUR_METHOD] es simplemente el nombre del método dentro de ese espacio de nombres.

+0

me encontré [esto] (https://msdn.microsoft.com/en-us/library/ms254956 (v = VS.90) .aspx) ser un recurso útil para lograr todo desde la línea de comandos – user2426679

2

Para añadir algo más de detalle/aclaración a anwser @ de kcrumley arriba:

[NAME_SPACE] es el completo nombre del tipo de y no sólo el espacio de nombres
- es decir, si su clase se llama StoredProcedures en un espacio de nombres de My.Name.Space, debe usar [My.Name.Space.StoredProcedures] para la parte [NAME_SPACE].

Si los procedimientos almacenados administrados pertenecen a una clase sin un espacio de nombres definido, solo use el nombre de clase simple (por ejemplo, [StoredProcedures]).

También tuve problemas para tratar de encontrar la manera de agregar un procedimiento con argumentos/parámetros. Así que aquí está una muestra de cualquier otra persona tratando de hacerlo:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int, 
    @parameter2 nvarchar 
) 
WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Cuestiones relacionadas