Procédures sous SqlServer

noelchulu - 12 nov. 2013 à 11:06
ChuluNoel Messages postés 20 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 20 juin 2017 - 12 nov. 2013 à 14:16
Bonjour,
Je suis entrain de prendre un code écrit sous VbNet et le ramener dans une procédure stockée sous SqlServer. Il se fait que sous DotNet, j'ai la facilité d'écrire des procédures privées que j'appelle quand j'en ai besoin, mais sous SqlServer, le problème se pose car je me demande comment faire pour créer des procédures que je pourrais appeler dans la procédure principale.J'ai recouru au branchement par GoTo, mais le résultat ne peut jamais etre le meme. Je pense créer des procédures stockées que la principale pourra appeler, je ne sais pas si l'idée est bonne ou s'il y a une autre issue pour parvenir à la solution.

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
12 nov. 2013 à 13:35
Salut,

l'autre "issue" est de faire un import d'essembly et d'utiliser directement tes fonctions vbnet.

C'est assez simple, il faut que ton code .net soit dans une dll.
Puis, tu la pose sur le serveur SQL, et tu la référence avec ce genre d' instructions :

USE MA_BASE
GO
CREATE ASSEMBLY [MonAssembly]
AUTHORIZATION [dbo]
FROM 'D:\MesAssemblies\MonAssembly.dll'
WITH PERMISSION_SET = UNSAFE


UNSAFE demandera une clef asymétrique et un login à mettre dans la base master (créée à partir d'un fichier .snk facilement généré dans Visual studio)

USE MASTER
GO  
CREATE ASYMMETRIC KEY MonAssembly
FROM EXECUTABLE FILE = 'D:\MesAssemblies\MonAssembly.dll'

CREATE LOGIN MonAsmLogin 
FROM ASYMMETRIC KEY MonAssembly
 
GRANT UNSAFE ASSEMBLY TO MonAssembly
GO



Voilà, y'a plus qu'a référencer les fonctions contenues dans l'assembly, comme ceci :
Imaginons que la dll contient une fonction nommée TestFunc
avec un paramètre XmlDocument en entrée par exemple,
et un entier en retour

USE MA_BASE
GO
CREATE FUNCTION TestFunc
( 
    @unDocXML xml
)
RETURNS int
AS EXTERNAL NAME MonAssembly.TestFunc


On pourra l'utiliser dans une procédure stockée ou dans une requête comme ceci :

select @ret = dbo.TestFunc( @unXml )



bye...
0
ChuluNoel Messages postés 20 Date d'inscription vendredi 5 avril 2013 Statut Membre Dernière intervention 20 juin 2017
12 nov. 2013 à 14:16
Salut,
Je vais essayer et promets de donner la suite.
Merci Yann.
0
Rejoignez-nous