Wie stelle ich eine verwaltete gespeicherte Prozedur ohne Verwendung von Visual Studio?

StackOverflow https://stackoverflow.com/questions/124295

  •  02-07-2019
  •  | 
  •  

Frage

Alles, was ich gelesen habe, sagt, dass, wenn eine verwaltete gespeicherte Prozedur zu machen, auf der rechten Maustaste in Visual Studio und wählen bereitstellen. Das funktioniert gut, aber was ist, wenn ich möchte es außerhalb von Visual Studio zu einer Reihe von verschiedenen Standorten implementieren? Ich versuchte, die Montage mit dem DLL das Projekt gebaut in SQL erstellen, und während es die Versammlung tat hinzufügen, es nicht zu schaffen, die Verfahren aus der Montage. Hat jemand herausgefunden, wie diese direkt in SQL zu tun, ohne Visual Studio zu verwenden?

War es hilfreich?

Lösung

Kopieren Sie die Assembly-DLL-Datei auf dem lokalen Laufwerk auf verschiedenen Servern. Dann registrieren Sie Ihre Assembly mit der Datenbank:

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]

Seien Sie sicher, dass die [Klammern zu verwenden, insbesondere um die NAME_SPACE. Namespaces kann eine beliebige Anzahl von Punkten in ihnen hat, aber SQL-Bezeichner können nicht, es sei denn, die Teile explizit auseinander durch eckige Klammern gesetzt sind. Dies war eine Quelle für viele Kopfschmerzen, wenn ich zum ersten Mal SQL CLR verwendet wird.

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

Andere Tipps

fügen Sie etwas ausführlicher / Klärung @ kcrumley des anwser oben:

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

Wenn Ihre verwalteten gespeicherten Prozeduren in einer Klasse sind ohne Namensraum definiert ist, man nur die nackten Klassennamen (zum Beispiel [StoredProcedures]).

Ich kämpfte auch für ein bisschen versuchen, herauszufinden, wie ein Verfahren mit den Argumenten / Parametern hinzuzufügen. 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] 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top