noelchulu
-
12 nov. 2013 à 11:06
ChuluNoel
Messages postés20Date d'inscriptionvendredi 5 avril 2013StatutMembreDernière intervention20 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.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 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...
ChuluNoel
Messages postés20Date d'inscriptionvendredi 5 avril 2013StatutMembreDernière intervention20 juin 2017 12 nov. 2013 à 14:16
Salut,
Je vais essayer et promets de donner la suite.
Merci Yann.
12 nov. 2013 à 14:16
Je vais essayer et promets de donner la suite.
Merci Yann.