Créer des procédures stockées étendues

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 procédure stockée étendue est une fonction C/C++ avec un prototype :

SRVRETCODE xp_extendedProcName **(**SRVPROC *) ;

L'utilisation du préfixe xp_ est facultative. Les noms de procédures stockées étendues respectent la casse lorsqu’ils sont référencés dans les instructions Transact-SQL, quelle que soit la page de codes/l’ordre de tri installé sur le serveur. Lorsque vous générez une DLL :

  • Si un point d'entrée est nécessaire, écrivez une fonction DllMain.

    Cette fonction est facultative ; si vous ne la fournissez pas dans le code source, le compilateur lie sa propre version, qui ne fait rien d'autre que de retourner TRUE. Si vous fournissez une fonction DllMain, le système d'exploitation appelle cette fonction lorsqu'un thread ou un processus est attaché à la DLL ou détaché de cette dernière.

  • Toutes les fonctions appelées hors de la DLL (toutes les procédures stockées étendues Efunctions) doivent être exportées.

    Vous pouvez exporter une fonction en répertoriant son nom dans la section EXPORT d’un fichier .def, ou vous pouvez préfixer le nom de la fonction dans le code source avec __declspec(dllexport), une extension de compilateur Microsoft (Notez que __declspec() commence par deux traits de soulignement.

Ces fichiers sont requis pour la création d'une DLL de procédure stockée étendue.

Fichier Description
Srv.h Fichier d'en-tête de l'API de procédure stockée étendue
Opends60.lib Bibliothèque d'importation pour Opends60.dll

Pour créer une DLL de procédure stockée étendue, créez un projet de type bibliothèque de liens dynamiques. Pour plus d'informations sur la création d'une DLL, consultez la documentation relative à l'environnement de développement.

Il est fortement recommandé que toutes les DLL de procédures stockées étendues implémentent et exportent la fonction suivante :

__declspec(dllexport) ULONG __GetXpVersion()  
{  
   return ODS_VERSION;  
}  

Remarque

__declspec(dllexport) est une extension du compilateur spécifique à Microsoft. Si votre compilateur ne prend pas en charge cette directive, vous devez exporter cette fonction dans votre fichier DEF sous la section EXPORTS.

Quand SQL Server est démarré avec l’indicateur de trace -T260 ou si un utilisateur disposant de privilèges d’administrateur système exécute DBCC TRACEON (260) et si la DLL de procédure stockée étendue ne prend pas en charge __GetXpVersion(), un message d’avertissement (Erreur 8131 : DLL de procédure stockée étendue '%' n’exporte pas __GetXpVersion().) est imprimé dans le journal des erreurs. (Notez que __GetXpVersion() commence par deux traits de soulignement.)

Si la DLL de procédure stockée étendue exporte __GetXpVersion(), mais que la version retournée par la fonction est antérieure à celle requise par le serveur, un message d'avertissement indiquant la version retournée par la fonction et la version attendue par le serveur est écrit dans le journal des erreurs. Si vous recevez ce message, vous retournez une valeur incorrecte à partir de __GetXpVersion(), ou vous compilez avec une version antérieure de srv.h.

Remarque

SetErrorMode, une fonction Microsoft Win32, ne doit pas être appelée dans les procédures stockées étendues.

Il est recommandé que toute procédure stockée étendue dont l'exécution est longue, appelle périodiquement srv_got_attention afin que la procédure puisse se terminer si la connexion est arrêtée ou si le lot est abandonné.

Pour déboguer une DLL de procédure stockée étendue, copiez-la dans le répertoire SQL Server\Binn. Pour spécifier l’exécutable de la session de débogage, entrez le chemin d’accès et le nom du fichier exécutable Microsoft SQL Server (par exemple, C :\Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Pour plus d’informations sur les arguments sqlservr, consultez l’application sqlservr.

Voir aussi

srv_got_attention (API de procédure stockée étendue)