Question

Tout ce que j'ai lu indique que, lors de la création d'une procédure stockée gérée, cliquer avec le bouton droit de la souris dans Visual Studio et choisir de déployer. Cela fonctionne bien, mais que se passe-t-il si je souhaite le déployer en dehors de Visual Studio sur un certain nombre d'emplacements différents? J'ai essayé de créer l'assembly avec la dll du projet construit en SQL, et bien qu'il ait ajouté l'assembly, il n'a pas créé les procédures à partir de l'assembly. Quelqu'un at-il compris comment faire cela directement dans SQL, sans utiliser Visual Studio?

Était-ce utile?

La solution

Copiez votre fichier DLL d'assemblage sur le lecteur local de vos différents serveurs. Enregistrez ensuite votre assembly dans la base de données:

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

... alors vous créez une fonction référençant la méthode publique appropriée dans la DLL:

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

Veillez à utiliser les crochets [, en particulier autour de NAME_SPACE. Les espaces de noms peuvent contenir un nombre quelconque de points, mais pas les identificateurs SQL, à moins que les parties ne soient explicitement séparées par des crochets. C’était une source de nombreux maux de tête lors de ma première utilisation de SQL CLR.

Pour être clair, [YOUR_ASSEMBLY] est le nom que vous avez défini en 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.

Autres conseils

Pour ajouter plus de détails / précisions à la réponse de @ kcrumley ci-dessus:

[NAME_SPACE] est le nom de type complet , et pas uniquement l'espace de noms

 - Par exemple, si votre classe s'appelle 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 gérées appartiennent à une classe sans espace de nom défini, utilisez simplement le nom de la classe nue (par exemple, [StoredProcedures] ).

J'ai également eu du mal à essayer de comprendre comment ajouter une procédure avec des arguments / paramètres. Voici donc un exemple pour tous ceux qui essaient de le faire:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top