Freigeben über


srv_convert (API für erweiterte gespeicherte 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.

Ändert Daten von einem Datentyp in einen anderen.

Syntax

  
int srv_convert (  
SRV_PROC *  
srvproc  
,  
int  
srctype  
,  
void *  
src  
,  
DBINT  
srclen  
,  
int  
desttype  
,  
void *  
  dest  
,  
DBINT  
destlen  
);  

Argumente

srvproc
Ein Zeiger auf die SRV_PROC-Struktur, die das Handle für eine bestimmte Clientverbindung ist. Die Struktur enthält alle Kontrollinformationen, mit der die API für erweiterte gespeicherte Prozeduren Kommunikationen und Daten zwischen der Anwendung und dem Client verwaltet. Wenn das srvproc-Handle zur Verfügung gestellt wird, wird es an die Fehlerhandlerfunktion der API für erweiterte gespeicherte Prozeduren übergeben, sobald ein Fehler auftritt.

srctype
Gibt den Datentyp der zu konvertierenden Daten an. Dieser Parameter kann ein beliebiger Datentyp der API für erweiterte gespeicherte Prozeduren sein.

src
Ist ein Zeiger auf die zu konvertierenden Daten. Dieser Parameter kann ein beliebiger Datentyp der API für erweiterte gespeicherte Prozeduren sein.

srclen
Gibt die Länge der zu konvertierenden Daten in Byte an. Wenn srclen 0 ist, fügt srv_convert einen NULL-Wert in die Zielvariable ein. Wenn nicht 0, wird dieser Parameter für Datentypen fester Länge ignoriert. In diesem Fall wird für die Quelldaten der Wert NULL angenommen. Für Daten des SRVCHAR-Datentyps gibt eine Länge von -1 an, dass die Zeichenfolge NULL-terminiert ist.

desttype
Gibt den Datentyp an, in den die Quelle konvertiert werden soll. Dieser Parameter kann ein beliebiger Datentyp der API für erweiterte gespeicherte Prozeduren sein.

dest
Ist ein Zeiger auf die Zielvariable, die die konvertierten Daten empfängt. Wenn dieser Zeiger NULL ist, ruft srv_convert den ggf. vom Benutzer bereitgestellten Fehlerhandler auf und gibt –1 zurück.

Wenn desttype den Wert SRVDECIMAL oder SRVNUMERIC aufweist, muss der dest-Parameter ein Zeiger auf eine DBNUMERIC- oder DBDECIMAL-Struktur sein, und die Felder für Genauigkeit und Dezimalstellen müssen bereits auf die gewünschten Werte festgelegt worden sein. Mit DEFAULTPRECISION können Sie eine Standardgenauigkeit angeben und mit DEFAULTSCALE einen Standardwert für die Dezimalstellen.

destlen
Gibt die Länge der Zielvariable in Byte an. Dieser Parameter wird für Datentypen fester Länge ignoriert. Für eine Zielvariable des Typs SRVCHAR muss der Wert von destlen der Gesamtlänge des Zielpufferspeichers entsprechen. Eine Länge von -1 für eine Zielvariable des Typs SRVCHAR oder SRVBINARY gibt an, dass genügend Speicher verfügbar ist. Für eine Zielvariable des Typs srvchar führt eine Länge von –1 zur NULL-Terminierung der Zeichenfolge.

Gibt zurück

Die Länge der konvertierten Daten (in Byte) bei erfolgreicher Konvertierung des Datentyps. Wenn srv_convert eine Konvertierungsanforderung erhält, die nicht unterstützt wird, wird – sofern vorhanden – der vom Entwickler bereitgestellte Fehlerhandler aufgerufen, eine globale Fehlernummer festgelegt und der Wert –1 zurückgegeben.

Hinweise

Die srv_willconvert-Funktion bestimmt, ob eine bestimmte Konvertierung zulässig ist.

Das Konvertieren von SRVFLT4 oder SRVFLT8 in die ungefähren numerischen Datentypen kann zu einem Genauigkeitsverlust führen. Ein Genauigkeitsverlust kann auch durch Konvertieren der ungefähren numerischen Datentypen SRVFLT4 oder SRVFLT8 in SRVCHAR oder SRVTEXT auftreten.

Das Konvertieren in SRVFLTx, SRVINTx, SRVMONEY, SRVMONEY4, SRVDECIMAL oder SRVNUMERIC kann zu einem Überlauf führen, wenn die Zahl größer ist als der Maximalwert des Ziels, oder zu einem Unterlauf, wenn die Zahl kleiner ist als der Mindestwert des Ziels. Wenn beim Konvertieren von SRVCHAR oder SRVTEXT ein Überlauf auftritt, enthält das erste Zeichen des resultierenden Werts einen Stern (*) als Hinweis auf den Fehler.

Wenn Sie SRVCHAR in SRVBINARY konvertieren, interpretiert srv_convert SRVCHAR als eine Hexadezimalzeichenfolge, unabhängig davon, ob die Zeichenfolge eine führende 0 enthält. Beim Konvertieren von SRVBINARY in SRVCHAR erstellt srv_convert eine Hexadezimalzeichenfolge ohne eine führende 0. In allen anderen Fällen ist eine Konvertierung in oder aus dem SRVBINARY-Datentyp eine exakte Bitkopie.

In bestimmten Fällen kann es nützlich sein, einen Datentyp in sich selbst zu konvertieren. Durch Konvertieren von SRVCHAR in SRVCHAR mit einem Wert für destlen von –1 wird einer Zeichenfolge beispielsweise ein NULL-Terminator hinzugefügt.

Eine Beschreibung der Datentypkonvertierungen von Datentypen und der API für die erweiterte Store-Prozedur finden Sie unter Datentypen (Erweiterte gespeicherte Prozedur-API).For a description of data types and Extended Store Procedure API data type conversions, see Data Types (Extended Stored Procedure API).

Die srv_convert-Funktion kann aus verschiedenen Gründen fehlschlagen:

  • Die angeforderte Konvertierung ist nicht verfügbar.

  • Die Konvertierung hat zu Abschneidung, Überlauf oder Genauigkeitsverlust in der Zielvariablen geführt.

  • Beim Konvertieren einer Zeichenfolge in einen numerischen Datentyp ist ein Syntaxfehler aufgetreten.

Wichtig

Sie sollten den Quellcode der erweiterten gespeicherten Prozeduren sorgfältig prüfen, und Sie sollten die kompilierten DLL-Dateien testen, bevor Sie sie auf einem Produktionsserver installieren. Weitere Informationen zum Überprüfen und Testen der Sicherheit finden Sie auf dieser Microsoft-Website.

Weitere Informationen

srv_setutype (API für erweiterte gespeicherte Prozeduren)
srv_willconvert (API für erweiterte gespeicherte Prozeduren)