Erstellen erweiterter gespeicherter Prozeduren

Gilt für:SQL Server

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen die CLR-Integration.

Eine erweiterte gespeicherte Prozedur ist eine C/C++-Funktion mit einem Prototyp:

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

Die Verwendung des Präfix xp_ ist optional. Namen erweiterter gespeicherter Prozeduren berücksichtigen die Groß-/Kleinschreibung, wenn auf Transact-SQL-Anweisungen verwiesen wird, unabhängig von der auf dem Server installierten Codepage/Sortierreihenfolge. Wenn Sie eine DLL erstellen:

  • Wenn ein Einstiegspunkt erforderlich ist, schreiben Sie eine DllMain-Funktion.

    Diese Funktion ist optional; wenn Sie sie nicht im Quellcode angeben, erstellt der Compiler einen Link zu seiner eigenen Version, die keine Aktionen ausführt, außer TRUE zurückzugeben. Wenn Sie eine DllMain-Funktion bereitstellen, ruft das Betriebssystem diese Funktion auf, wenn ein Thread oder ein Prozess mit der DLL verbunden oder von ihr getrennt wird.

  • Alle von außerhalb der DLL aufgerufenen Funktionen (alle e-Funktionen einer erweiterten gespeicherten Prozedur) müssen exportiert werden.

    Sie können eine Funktion exportieren, indem Sie den Namen im Exportabschnitt einer DEF-Datei auflisten oder dem Funktionsnamen im Quellcode __declspec(dllexport) voranstellen, eine Microsoft-Compilererweiterung (Beachten Sie, dass __declspec() mit zwei Unterstrichen beginnt).

Diese Dateien sind zum Erstellen einer DLL einer erweiterten gespeicherten Prozedur erforderlich.

Datei Beschreibung
Srv.h API-Headerdatei für erweiterte gespeicherte Prozeduren
Opends60.lib Importbibliothek für Opends60.dll

Um eine DLL für eine erweiterte gespeicherte Prozedur zu erstellen, erstellen Sie ein Projekt des Typs Dynamic Link Library. Weitere Informationen über das Erstellen einer DLL finden Sie in der Dokumentation zur Entwicklungsumgebung.

Es wird empfohlen, dass alle DLLs für erweiterte gespeicherte Prozeduren die folgende Funktion implementieren und exportieren:

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

Hinweis

__declspec (dllexport) ist eine Microsoft-spezifische Compilererweiterung. Wenn Ihr Compiler diese Direktive nicht unterstützt, sollten Sie diese Funktion in Ihre DEF-Datei im Abschnitt EXPORTS exportieren.

Wenn SQL Server mit dem Ablaufverfolgungskennzeichnung -T260 gestartet wird oder ein Benutzer mit Systemadministratorberechtigungen DBCC TRACEON (260) ausführt und wenn die DLL für die erweiterte gespeicherte Prozedur __GetXpVersion() nicht unterstützt, wird eine Warnmeldung (Fehler 8131: Erweiterte gespeicherte Prozedur DLL '%' exportiert nicht __GetXpVersion().) wird in das Fehlerprotokoll gedruckt. (Beachten Sie, dass __GetXpVersion() mit zwei Unterstrichen beginnt.)

Wenn die DLL für die erweiterte gespeicherte Prozedur __GetXpVersion() exportiert, die von der Funktion zurückgegebene Version jedoch niedriger ist als die vom Server benötigte Version, wird eine Warnmeldung ausgegeben. Diese gibt die von der Funktion zurückgegebene Version und die vom Server benötigte Version im Fehlerprotokoll an. Wenn Sie diese Meldung erhalten, geben Sie einen falschen Wert aus __GetXpVersion() zurück, oder Sie kompilieren mit einer älteren Version von srv.h.

Hinweis

SetErrorMode, eine Microsoft Win32-Funktion, sollte nicht in erweiterten gespeicherten Prozeduren aufgerufen werden.

Es wird empfohlen, dass eine erweiterte gespeicherte Prozedur mit langer Ausführungszeit in regelmäßigen Abständen srv_got_attention aufruft, damit die Prozedur sich selbst beenden kann, falls die Verbindung unterbrochen oder der Batch abgebrochen wird.

Um eine erweiterte gespeicherte Prozedur-DLL zu debuggen, kopieren Sie sie in das VERZEICHNIS SQL Server\Binn. Um die ausführbare Datei für die Debugsitzung anzugeben, geben Sie den Pfad und Dateinamen der ausführbaren Microsoft SQL Server-Datei ein (z. B. "C:\Programme\Microsoft SQL Server\MSSQL13". MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Informationen zu sqlservr-Argumenten finden Sie unter sqlservr Application.

Weitere Informationen

srv_got_attention (API für erweiterte gespeicherte Prozeduren)