Création de procédures stockées étendues
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt l'intégration du CLR.
Une procédure stockée étendue est une fonction 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 des instructions Transact-SQL, indépendamment de la page de codes/de l'ordre de tri 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 EXPORTS d'un fichier .def ; vous pouvez également préfixer le nom de la fonction dans le code source à l'aide de __declspec(dllexport), une extension du 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.
Lorsque SQL Server démarre avec l'indicateur de trace -T260 ou lorsqu'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 : la DLL de procédure stockée étendue '%' n'exporte pas __GetXpVersion().) est écrit 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 obtenez ce message, cela signifie que vous retournez une valeur incorrecte à partir de __GetXpVersion() ou que vous effectuez la compilation à l'aide d'une version antérieure de srv.h.
[!REMARQUE]
SetErrorMode (fonction Microsoft Win32) ne doit pas être appelé 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 vers le répertoire SQL Server\Binn. Pour spécifier le fichier exécutable de la session de débogage, entrez le chemin d'accès et le nom de fichier de l'exécutable MicrosoftSQL Server (par exemple C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Pour plus d'informations sur les arguments sqlservr, consultez Application sqlservr.