Partager via


Ajout d'une procédure stockée étendue à SQL Server

S’applique à : SQL Server

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez l'intégration CLR à la place.

Une DLL qui contient des fonctions de procédure stockée étendue agit comme une extension à SQL Server. Pour installer la DLL, copiez le fichier dans un répertoire, par exemple celui qui contient les fichiers DLL SQL Server standard (C :\Program Files\Microsoft SQL Server\MSSQL12.0.x\MSSQL\Binn par défaut).

Une fois la DLL de procédure stockée étendue copiée sur le serveur, un administrateur système SQL Server doit s’inscrire à SQL Server chaque fonction de procédure stockée étendue dans la DLL. Vous devez pour cela utiliser la procédure stockée système sp_addextendedproc.

Important

Il est conseillé à l'administrateur système de vérifier minutieusement la procédure stockée étendue afin de s'assurer qu'elle ne contient aucun code nuisible ou malveillant avant de l'ajouter au serveur et d'accorder à d'autres utilisateurs des autorisations d'exécution. Validez toutes les entrées utilisateur. Ne concatènez pas l’entrée utilisateur avant de la valider. N'exécutez jamais une commande élaborée à partir d'une entrée utilisateur non validée.

Le premier paramètre de sp_addextendedproc spécifie le nom de la fonction et le deuxième paramètre spécifie le nom de la DLL dans laquelle cette fonction réside. Il est recommandé de spécifier le chemin complet d'accès à la DLL.

Important

Les DLL existantes qui n'ont pas été inscrites avec un chemin d'accès complet ne fonctionneront plus après une mise à niveau vers SQL Server 2005 ou version ultérieure. Pour corriger ce problème, utilisez sp_dropextendedproc pour annuler l'inscription de la DLL, puis inscrivez-la de nouveau avec la procédure sp_addextendedproc, en spécifiant le chemin d'accès complet.

Le nom de la fonction spécifié dans sp_addextendedproc doit être exactement identique (y compris la casse) au nom de la fonction dans la DLL. Par exemple, cette commande inscrit une fonction xp_hello, située dans une dll nommée xp_hello.dll, en tant que procédure stockée étendue SQL Server :

sp_addextendedproc 'xp_hello', 'c:\Program Files\Microsoft SQL Server\MSSQL13.0.MSSQLSERVER\MSSQL\Binn\xp_hello.dll';  

Si le nom de la fonction spécifiée dans sp_addextendedproc ne correspond pas exactement au nom de la fonction dans la DLL, le nouveau nom est inscrit dans SQL Server, mais le nom n’est pas utilisable. Par exemple, bien qu’il xp_Hello soit inscrit en tant que procédure stockée étendue SQL Server située dans xp_hello.dll, SQL Server ne pourra pas trouver la fonction dans la DLL si vous utilisez xp_Hello pour appeler la fonction ultérieurement.

--Register the function (xp_hello) with an initial upper case  
sp_addextendedproc 'xp_Hello', 'c:\xp_hello.dll';  
  
--Use the newly registered name to call the function  
DECLARE @txt varchar(33);  
EXEC xp_Hello @txt OUTPUT;  
  
--This is the error message  
Server: Msg 17750, Level 16, State 1, Procedure xp_Hello, Line 1  
Could not load the DLL xp_hello.dll, or one of the DLLs it references. Reason: 127(The specified procedure could not be found.).  

Si le nom de la fonction spécifiée correspond sp_addextendedproc exactement au nom de la fonction dans la DLL et que le classement de l’instance SQL Server ne respecte pas la casse, l’utilisateur peut appeler la procédure stockée étendue à l’aide de n’importe quelle combinaison de lettres minuscules et majuscules du nom.

--Register the function (xp_hello)  
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll';  
  
--The following will succeed in calling xp_hello  
DECLARE @txt varchar(33);  
EXEC xp_Hello @txt OUTPUT;  
  
DECLARE @txt varchar(33);  
EXEC xp_HelLO @txt OUTPUT;  
  
DECLARE @txt varchar(33);  
EXEC xp_HELLO @txt OUTPUT;  

Lorsque le classement de l’instance SQL Server respecte la casse, SQL Server ne pourra pas appeler la procédure stockée étendue, même s’il a été inscrit avec exactement le même nom et le même classement que la fonction dans la DLL, si la procédure est appelée avec un cas différent.

--Register the function (xp_hello)  
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll';  
  
--The following will result in an error  
DECLARE @txt varchar(33);  
EXEC xp_HELLO @txt OUTPUT;  
  
--This is the error  
Server: Msg 2812, Level 16, State 62, Line 1  

Il n’est pas nécessaire d’arrêter et de redémarrer SQL Server.

Voir aussi

sp_addextendedproc (Transact-SQL)
sp_dropextendedproc (Transact-SQL)