Große benutzerdefinierte CLR-Typen (ODBC)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Wichtig
Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, das als Komponente von SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Supportlebenszyklus-Ausnahme.
In diesem Abschnitt werden Änderungen an ODBC in SQL Server Native Client erläutert, durch die große benutzerdefinierte Common Language Runtime-Typen (CLR-UDTs) unterstützt werden.
Ein Beispiel zur ODBC-Unterstützung für große CLR-UDTs finden Sie unter Unterstützung für große UDTs.
Weitere Informationen zur Unterstützung großer CLR-UDTs in SQL Server Native Client finden Sie unter Große CLR-User-Defined typen.
Datenformat
SQL Server Native Client verwendet SQL_SS_LENGTH_UNLIMITED, um anzugeben, dass die Größe einer Spalte 8.000 Bytes für LOB-Typen (Large Object) überschreitet. Ab SQL Server 2008 wird derselbe Wert für CLR-UDTs mit einer Größe von über 8.000 Bytes verwendet.
UDT-Werte werden als Bytearrays dargestellt. Konvertierungen zu und von hexadezimalen Zeichenfolgen werden unterstützt. Literalwerte werden mit dem Präfix 0x als hexadezimale Zeichenfolgen dargestellt.
In der folgenden Tabelle wird die Datentypzuordnung in Parametern und Resultsets gezeigt:
SQL Server-Datentyp | SQL-Datentyp | value |
---|---|---|
CLR-UDT | SQL_SS_UDT | -151 (sqlncli.h) |
In der folgenden Tabelle werden die entsprechenden Strukturen und ODBC C-Typen erläutert. Im Wesentlichen ist CLR UDT ein varbinärer Typ mit zusätzlichen Metadaten.
SQL-Datentyp | Speicherlayout | C-Datentyp | Wert (sqlext.h) |
---|---|---|---|
SQL_SS_UDT | SQLCHAR * (Char ohne Vorzeichen *) | SQL_C_BINARY | SQL_BINARY (-2) |
Deskriptorfelder für Parameter
In den IPD-Feldern werden Informationen wie folgt zurückgegeben:
Deskriptorfeld | SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
---|---|---|
SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CONCISE_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE | 0 | 0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE |
SQL_DESC_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LOCAL_TYPE_NAME | "udt" | "udt" |
SQL_DESC_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE | 0 | 0 |
SQL_DESC_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_TYPE_NAME | "udt" | "udt" |
SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME | Der Name des Katalogs, der die UDT enthält. | Der Name des Katalogs, der die UDT enthält. |
SQL_CA_SS_UDT_SCHEMA_NAME | Der Name des Schemas, das den UDT enthält. | Der Name des Schemas, das die UDT enthält. |
SQL_CA_SS_UDT_TYPE_NAME | Dies ist der Name des UDT. | Dies ist der Name des UDT. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME | Der vollqualifizierte Name des UDT. | Der vollqualifizierte Name des UDT. |
Bei UDT-Parametern muss SQL_CA_SS_UDT_TYPE_NAME immer über SQLSetDescField festgelegt werden. SQL_CA_SS_UDT_CATALOG_NAME und SQL_CA_SS_UDT_SCHEMA_NAME sind optional.
Ist der UDT in derselben Datenbank mit einem anderen Schema als die Tabelle definiert, muss SQL_CA_SS_UDT_SCHEMA_NAME festgelegt werden.
Ist der UDT in einer anderen Datenbank als die Tabelle definiert, müssen SQL_CA_SS_UDT_CATALOG_NAME und SQL_CA_SS_UDT_SCHEMA_NAME festgelegt werden.
Bei Fehlern oder Auslassungen in den Einstellungen für SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME oder SQL_CA_SS_UDT_SCHEMA_NAME wird ein Diagnosedatensatz mit SQLSTATE HY000 und einem serverspezifischen Meldungstext generiert.
Deskriptorfelder für Ergebnisse
In den IRD-Feldern werden Informationen wie folgt zurückgegeben:
Deskriptorfeld | SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CONCISE_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE | 0 | 0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_DISPLAY_SIZE | 2n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE |
SQL_DESC_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LITERAL_PREFIX | "0x" | "0x" |
SQL_DESC_LITERAL_SUFFIX | "" | "" |
SQL_DESC_LOCAL_TYPE_NAME | "udt" | "udt" |
SQL_DESC_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE | 0 | 0 |
SQL_DESC_SEARCHABLE | SQL_PRED_NONE | SQL_PRED_NONE |
SQL_DESC_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_TYPE_NAME | "udt" | "udt" |
SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME | Der Name des Katalogs, der die UDT enthält. | Der Name des Katalogs, der die UDT enthält. |
SQL_CA_SS_UDT_SCHEMA_NAME | Der Name des Schemas, das den UDT enthält. | Der Name des Schemas, das den UDT enthält. |
SQL_CA_SS_UDT_TYPE_NAME | Dies ist der Name des UDT. | Dies ist der Name des UDT. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME | Der vollqualifizierte Name des UDT. | Der vollqualifizierte Name des UDT. |
Von SQLColumns und SQLProcedureColumns zurückgegebene Spaltenmetadaten (Katalogmetadaten)
Die folgenden Spaltenwerte werden für UDTs zurückgegeben:
Spaltenname | SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
---|---|---|
DATA_TYPE | SQL_SS_UDT | SQL_SS_UDT |
TYPE_NAME | Dies ist der Name des UDT. | Dies ist der Name des UDT. |
COLUMN_SIZE | n | SQL_SS_LENGTH_UNLIMITED (0) |
BUFFER_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
DECIMAL_DIGITS | NULL | NULL |
SQL_DATA_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DATETIME_SUB | NULL | NULL |
CHAR_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SS_UDT_CATALOG_NAME | Der Name des Katalogs, der den UDT enthält. | Der Name des Katalogs, der den UDT enthält. |
SS_UDT_SCHEMA_NAME | Der Name des Schemas, das den UDT enthält. | Der Name des Schemas, das den UDT enthält. |
SS_UDT_ASSEMBLY_TYPE_NAME | Der vollqualifizierte Name des UDT. | Der vollqualifizierte Name des UDT. |
Die letzten drei Spalten sind treiberspezifische Spalten. Sie werden nach allen von ODBC definierten Spalten hinzugefügt, aber vor allen vorhandenen treiberspezifischen Spalten des Resultsets von SQLColumns oder SQLProcedureColumns.
Von SQLGetTypeInfo, für einzelne UDTs oder für den generischen Typ "udt" werden keine Zeilen zurückgegeben.
Bindungen und Konvertierungen
Die unterstützten Konvertierungen von SQL- zu C-Datentypen sind wie folgt:
Konvertierung von und zu: | SQL_SS_UDT |
---|---|
SQL_C_WCHAR | Unterstützt* |
SQL_C_BINARY | Unterstützt |
SQL_C_CHAR | Unterstützt* |
* Binärdaten werden in eine hexadezimale Zeichenfolge konvertiert.
Die unterstützten Konvertierungen von C- zu SQL-Datentypen sind wie folgt:
Konvertierung von und zu: | SQL_SS_UDT |
---|---|
SQL_C_WCHAR | Unterstützt* |
SQL_C_BINARY | Unterstützt |
SQL_C_CHAR | Unterstützt* |
* Konvertierung einer hexadezimalen Zeichenfolge in Binärdaten.
SQL_VARIANT-Unterstützung für UDTs
UDTs werden in SQL_VARIANT-Spalten nicht unterstützt.
BCP-Unterstützung für UDTs
UDT-Werte können nur als Zeichen oder Binärwerte importiert und exportiert werden.
Verhalten von Clients der unteren Ebene für UDTs
Für UDTs gilt die folgende Typzuordnung zu Clients der unteren Ebene:
Serverversion | SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
---|---|---|
SQL Server 2005 | UDT | varbinary(max) |
SQL Server 2008 und höher | UDT | UDT |
ODBC-Funktionen, die große CLR-UDTs unterstützen
In diesem Abschnitt werden Änderungen an SQL Server Native Client-ODBC-Funktionen erläutert, durch die große CLR-UDTs unterstützt werden.
SQLBindCol
UdT-Ergebnisspaltenwerte werden von SQL in C-Datentypen konvertiert, wie im Abschnitt "Bindungen und Konvertierungen" weiter oben in diesem Thema beschrieben.
SQLBindParameter
Für UDTs sind folgende Werte erforderlich:
SQL-Datentyp | Parametertyp | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLColAttribute
Die für UDTs zurückgegebenen Werte sind im Abschnitt "Deskriptorfelder für Ergebnisse" oben erläutert.
SQLColumns
Die für UDTs zurückgegebenen Werte sind wie im Abschnitt "Von SQLColumns und SQLProcedureColumns zurückgegebene Spaltenmetadaten (Katalogmetadaten)" weiter oben in diesem Thema beschrieben.
SQLDescribeCol
Für UDTs werden folgende Werte zurückgegeben:
SQL-Datentyp | DataTypePtr | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLDescribeParam
Für UDTs werden folgende Werte zurückgegeben:
SQL-Datentyp | DataTypePtr | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLFetch
UdT-Ergebnisspaltenwerte werden von SQL in C-Datentypen konvertiert, wie im Abschnitt "Bindungen und Konvertierungen" weiter oben in diesem Thema beschrieben.
SQLFetchScroll
UdT-Ergebnisspaltenwerte werden von SQL in C-Datentypen konvertiert, wie im Abschnitt "Bindungen und Konvertierungen" weiter oben in diesem Thema beschrieben.
SQLGetData
UdT-Ergebnisspaltenwerte werden von SQL in C-Datentypen konvertiert, wie im Abschnitt "Bindungen und Konvertierungen" weiter oben in diesem Thema beschrieben.
SQLGetDescField
Die für die neuen Datentypen verfügbaren Deskriptorfelder sind in den Abschnitten "Deskriptorfelder für Parameter" und "Deskriptorfelder für Ergebnisse" oben erläutert.
SQLGetDescRec
Für UDTs werden folgende Werte zurückgegeben:
SQL-Datentyp | Typ | Untertyp | Länge | Genauigkeit | Skalieren |
---|---|---|---|---|---|
SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT | 0 | n | n | 0 |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
SQL_SS_UDT | 0 | SQL_SS_LENGTH_UNLIMITED (0) | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLGetTypeInfo
Die für UDTs zurückgegebenen Werte sind im Abschnitt "Von SQLColumns und SQLProcedureColumns zurückgegebene Spaltenmetadaten (Katalogmetadaten)" oben erläutert.
SQLProcedureColumns
Die für UDTs zurückgegebenen Werte sind im Abschnitt "Von SQLColumns und SQLProcedureColumns zurückgegebene Spaltenmetadaten (Katalogmetadaten)" oben erläutert.
SQLPutData
UDT-Parameterwerte werden von C-Datentypen in SQL-Datentypen konvertiert, wie im Abschnitt "Bindungen und Konvertierungen" weiter oben in diesem Thema beschrieben.
SQLSetDescField
Das mit den neuen Typen verfügbare Deskriptorfeld wird weiter oben in diesem Thema in den Abschnitten "Deskriptorfelder für Parameter" und "Deskriptorfelder für Ergebnisse" beschrieben.
SQLSetDescRec
Die zulässigen Werte für UDTs lauten wie folgt:
SQL-Datentyp | Typ | Untertyp | Länge | Genauigkeit | Skalieren |
---|---|---|---|---|---|
SQL_SS_UDT (Länge kleiner oder gleich 8.000 Bytes) |
SQL_SS_UDT | 0 | n | n | 0 |
SQL_SS_UDT (Länge größer als 8.000 Bytes) |
SQL_SS_UDT | 0 | SQL_SS_LENGTH_UNLIMITED (0) | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
'SQLSpecialColumns'
Die für die Spalten DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH und DECIMAL_DIGTS zurückgegebenen UDT-Werte sind im Abschnitt "Von SQLColumns und SQLProcedureColumns zurückgegebene Spaltenmetadaten (Katalogmetadaten)" oben erläutert.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für