Erstellen erweiterter gespeicherter Prozeduren

Wichtiger HinweisWichtig

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen die CLR-Integration.

Eine erweiterte gespeicherte Prozedur ist eine Funktion mit einem Prototyp:

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

Die Verwendung des Präfix xp_ ist optional. Bei den Namen erweiterter gespeicherter Prozeduren wird die Groß-/Kleinschreibung beachtet, wenn in Transact-SQL-Anweisungen auf sie verwiesen wird, und zwar 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 eine Verknüpfung 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 ihren Namen im Abschnitt EXPORTS einer DEF-Datei auflisten, oder Sie können dem Funktionsnamen im Quellcode das Präfix __declspec(dllexport), eine Microsoft-Compilererweiterung, hinzufügen (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;
}
HinweisHinweis

__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 Ablaufverfolgungsflag -T260 gestartet wird oder wenn ein Benutzer mit Systemadministratorprivilegien DBCC TRACEON (260) durchführt und wenn die DLL für erweiterte gespeicherte Prozeduren __GetXpVersion() nicht unterstützt, wird eine Warnmeldung (Fehler 8131: Die DLL der erweiterten gespeicherten Prozedur '%s' exportiert __GetXpVersion() nicht) im Fehlerprotokoll ausgegeben. (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 von __GetXpVersion() zurück, oder Sie verwenden eine ältere Version von srv.h für die Kompilierung.

HinweisHinweis

SetErrorMode, eine Microsoft Win32 Funktion, sollte in erweiterten gespeicherten Prozeduren nicht 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.

Wenn Sie eine DLL für eine erweiterte gespeicherte Prozedur debuggen möchten, kopieren Sie sie in das Verzeichnis SQL Server\Binn. Wenn Sie die ausführbare Datei für die Debugsitzung angeben möchten, geben Sie den Pfad und den Namen der ausführbaren MicrosoftSQL Server-Datei an (beispielsweise C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Informationen zu sqlservr-Argumenten finden Sie unter sqlservr (Anwendung).