Domanda

Tutto quello che ho letto dice che quando si effettua una stored procedure gestita, fare clic con il tasto destro in Visual Studio e scegliere deploy. Funziona bene, ma cosa succede se voglio distribuirlo al di fuori di Visual Studio in un numero di posizioni diverse? Ho provato a creare l'assembly con la dll il progetto creato in SQL e mentre ha aggiunto l'assembly, non ha creato le procedure fuori dall'assembly. Qualcuno ha capito come farlo direttamente in SQL, senza usare Visual Studio?

È stato utile?

Soluzione

Copia il file DLL dell'assembly nell'unità locale sui vari server. Quindi registrare l'assembly con il database:

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

... quindi si crea una funzione che fa riferimento al metodo pubblico appropriato nella DLL:

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

Assicurati di usare le [parentesi, specialmente attorno a NAME_SPACE. Gli spazi dei nomi possono contenere un numero qualsiasi di punti, ma gli identificatori SQL no, a meno che le parti non siano esplicitamente separate da parentesi quadre. Questa era la fonte di molti mal di testa quando usavo per la prima volta SQL CLR.

Per essere chiari, [YOUR_ASSEMBLY] è il nome che hai definito in SQL; [NAME_SPACE] è lo spazio dei nomi .NET all'interno della DLL in cui è possibile trovare il metodo; e [YOUR_METHOD] è semplicemente il nome del metodo all'interno di quello spazio dei nomi.

Altri suggerimenti

Per aggiungere ulteriori dettagli / chiarimenti alla risposta di @ kcrumley sopra:

[NAME_SPACE] è il nome tipo completo e non solo lo spazio dei nomi
 - cioè se la tua classe è chiamata StoredProcedures in uno spazio dei nomi di My.Name.Space , devi usare [My.Name.Space.StoredProcedures] per la parte [NAME_SPACE].

Se le stored procedure gestite si trovano in una classe senza uno spazio dei nomi definito, è sufficiente utilizzare il nome della classe nuda (ad esempio [StoredProcedures] ).

Ho anche lottato per un po 'cercando di capire come aggiungere una procedura con argomenti / parametri. Ecco quindi un esempio per chiunque cerchi di farlo:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top