2008-09-23 2 views
7

Alles, was ich gelesen habe, besagt, dass beim Erstellen einer verwalteten gespeicherten Prozedur mit der rechten Maustaste in Visual Studio klicken und Deploy auswählen. Das funktioniert gut, aber was ist, wenn ich es außerhalb von Visual Studio an verschiedenen Standorten bereitstellen möchte? Ich habe versucht, die Assembly mit der DLL das Projekt in SQL erstellt zu erstellen, und während es die Assembly hinzugefügt wurde, erstellt es die Prozeduren nicht aus der Assembly. Hat jemand herausgefunden, wie man das direkt in SQL macht, ohne Visual Studio zu benutzen?Wie stelle ich eine verwaltete gespeicherte Prozedur bereit, ohne Visual Studio zu verwenden?

Antwort

6

Kopieren Sie Ihre Assembly DLL-Datei auf das lokale Laufwerk auf Ihren verschiedenen Servern. Dann die Assembly mit der Datenbank registrieren:

create assembly [YOUR_ASSEMBLY] 
from '(PATH_TO_DLL)' 

... dann erstellen Sie eine Funktion die entsprechende öffentliche Methode in der DLL-Referenzierung:

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

unbedingt die [Klammern verwenden, insbesondere um die NAME_SPACE. Namespaces können eine beliebige Anzahl von Punkten enthalten, SQL-IDs jedoch nicht, sofern die Teile nicht explizit durch eckige Klammern voneinander getrennt sind. Dies war eine Quelle vieler Kopfschmerzen, als ich SQL CLR zum ersten Mal verwendete.

Um klar zu sein, ist [YOUR_ASSEMBLY] der Name, den Sie in SQL definiert haben; [NAME_SPACE] ist der .NET-Namespace innerhalb der DLL, in dem Ihre Methode gefunden werden kann. und [YOUR_METHOD] ist einfach der Name der Methode in diesem Namespace.

+0

Ich fand [diese] (https://msdn.microsoft.com/en-us/library/ms254956 (v = VS.90) aspx) eine hilfreiche Ressource zu sein, um das Ganze von der Befehlszeile aus zu erreichen – user2426679

2

Für etwas mehr Detail/Klärung @ anwser des kcrumley oben hinzufügen:

[NAME_SPACE] sind die vollständig qualifizierten Typnamen und nicht nur der Namensraum
- also, wenn Ihre Klasse StoredProcedures in einem Namespace genannt wird von My.Name.Space müssen Sie [My.Name.Space.StoredProcedures] für den Teil [NAME_SPACE] verwenden.

Wenn sich Ihre verwalteten gespeicherten Prozeduren in einer Klasse befinden, für die kein Namespace definiert ist, verwenden Sie einfach den Namen der nackten Klasse (z. B. [StoredProcedures]).

Ich hatte auch ein wenig Mühe, herauszufinden, wie man eine Prozedur mit Argumenten/Parametern hinzufügt. So heres eine Probe für jemand anderes versucht, dies zu tun:

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