Pregunta

Todo lo que he leído dice que al realizar un procedimiento almacenado administrado, hacer clic derecho en Visual Studio y elegir implementar.Eso funciona bien, pero ¿qué sucede si quiero implementarlo fuera de Visual Studio en varias ubicaciones diferentes?Intenté crear el ensamblado con la DLL que el proyecto creó en SQL y, aunque agregó el ensamblado, no creó los procedimientos a partir del ensamblado.¿Alguien ha descubierto cómo hacer esto directamente en SQL, sin usar Visual Studio?

¿Fue útil?

Solución

Copie su archivo DLL de ensamblaje en la unidad local de sus distintos servidores.Luego registre su ensamblaje con la base de datos:

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

...luego creas una función que hace referencia al método público apropiado en la DLL:

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

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

Para ser claros, [YOUR_ASSEMBLY] es el nombre que definiste en SQL;[NAME_SPACE] es el espacio de nombres .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.

Otros consejos

Para agregar más detalles/aclaraciones a la respuesta anterior de @kcrumley:

[NAME_SPACE] es el totalmente calificado escribe un nombre y no solo el espacio de nombres
- es decir.si tu clase se llama StoredProcedures en un espacio de nombres de My.Name.Space, debes usar [My.Name.Space.StoredProcedures] para la parte [NAME_SPACE].

Si sus procedimientos almacenados administrados están en una clase sin un espacio de nombres definido, simplemente use el nombre de la clase simple (p. ej. [StoredProcedures]).

También luché un poco tratando de descubrir cómo agregar un procedimiento con argumentos/parámetros.Así que aquí hay un ejemplo para cualquiera que intente hacerlo:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top