2008-09-23 12 views
7

Tout ce que j'ai lu indique que lors d'une procédure stockée gérée, cliquez avec le bouton droit dans Visual Studio et choisissez Déployer. Cela fonctionne bien, mais que se passe-t-il si je souhaite le déployer en dehors de Visual Studio vers un certain nombre d'emplacements différents? J'ai essayé de créer l'assembly avec le dll du projet construit en SQL, et bien qu'il ait ajouté l'assemblage, il n'a pas créé les procédures hors de l'assemblage. Est-ce que quelqu'un a trouvé comment faire cela directement dans SQL, sans utiliser Visual Studio?Comment déployer une procédure stockée gérée sans utiliser Visual Studio?

Répondre

6

Copiez le fichier DLL de votre assembly sur le lecteur local de vos différents serveurs. Alors inscrivez-vous votre assemblage avec la base de données:

create assembly [YOUR_ASSEMBLY] 
from '(PATH_TO_DLL)' 

... alors vous créez une fonction faisant référence à la méthode appropriée du public dans la DLL:

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

Assurez-vous d'utiliser les [crochets, en particulier autour de la NAME_SPACE. Les espaces de noms peuvent contenir un nombre quelconque de points, mais les identificateurs SQL ne le peuvent pas, sauf si les parties sont explicitement séparées par des crochets. Cela a été une source de nombreux maux de tête lorsque j'ai commencé à utiliser SQL CLR. Pour être clair, [MON ASSEMBLAGE] est le nom que vous avez défini dans SQL; [NAME_SPACE] est l'espace de noms .NET dans la DLL où votre méthode peut être trouvée; et [YOUR_METHOD] est simplement le nom de la méthode dans cet espace de noms.

+0

Je trouve [cette] (https://msdn.microsoft.com/en-us/library/ms254956 (v = VS.90) .aspx) pour être une ressource utile pour accomplir le tout à partir de la ligne de commande – user2426679

2

Pour ajouter un peu plus en détail/clarification au anwser de @ kcrumley ci-dessus:

[NAME_SPACE] est le nom du type complet et non pas seulement l'espace de noms
- à savoir si votre classe est appelée StoredProcedures dans un espace de noms De My.Name.Space, vous devez utiliser [My.Name.Space.StoredProcedures] pour la partie [NAME_SPACE].

Si vos procédures stockées managées sont dans une classe sans espace de noms défini, utilisez simplement le nom de classe vide (par exemple, [StoredProcedures]).

J'ai aussi eu du mal à trouver un moyen d'ajouter une procédure avec des arguments/paramètres. Donc, voici un échantillon pour quelqu'un d'autre d'essayer de le faire:

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