Datentypzuordnung mit verteilten Abfragen
Ein OLE DB-Anbieter stellt die Datentypen seiner Daten in Form von OLE DB-Typenbezeichnern (DBTYPEs) dar. Datentypen werden zwischen OLE DB-Datentypen und SQL Server-Systemdatentypen durch Zuordnen von Daten konvertiert:
- OLE DB-Datentypen werden SQL Server-Systemdatentypen zugeordnet. Diese Konvertierung erfolgt, wenn SQL Server Daten aus der OLE DB-Datenquelle liest, entweder in SELECT-Anweisungen oder beim Lesevorgang in UPDATE-, INSERT- oder DELETE-Anweisungen.
- SQL Server-Systemdatentypen werden OLE DB-Datentypen zugeordnet. Diese Konvertierung erfolgt, wenn SQL Server, meist in INSERT- oder UPDATE-Anweisungen, Daten in die OLE DB-Datenquelle schreibt, in der die geänderte Tabelle als Remotetabelle vorliegt.
Datentypzuordnung vom OLE DB-Anbieter zu SQL Server
Die Datentypzuordnung vom OLE DB-Anbieter zu SQL Server definiert die zulässigen Vergleiche und Ausdrücke sowie die gültigen expliziten Konvertierungen, die Remotedaten betreffen. Die Zuordnung wird in der folgenden Tabelle gezeigt.
Die Typgültigkeit für Remotetabellenspalten in Ausdrücken lässt sich wie folgt zusammenfassen: Ein Remotespaltenwert ist in einem Transact-SQL-Ausdruck zulässig, wenn der entsprechende zugeordnete SQL Server-Datentyp in der Datentyp-Zuordnungstabelle im gleichen Kontext zulässig ist.
Angenommen, der folgende Ausdruck liegt vor: local_columnOPERATOR remote_column. In diesem Ausdruck ist local_column eine lokale Tabellenspalte, und remote_column ist eine Remotetabellenspalte. Dieser Ausdruck ist gültig, wenn OPERATOR ein gültiger Operator für den Datentyp der lokalen Spalte und für den Datentyp ist, dem DBTYPE von remote_column zugeordnet wird.
Ebenso ist CAST(remote_columnASdata_type_1) zulässig, wenn DBTYPE von remote_column dem SQL Server-Systemdatentyp data_type_2 zugeordnet wird und explizite Konvertierung von data_type_2 in data_type_1 zulässig ist. Eine Spalte des Datentyps DBTYPE_DATE auf der Anbieterseite kann z. B. in eine datetime-Spalte in SQL Server konvertiert werden. Die DBTYPE_DATE-Daten können jedoch nicht direkt in varchar konvertiert werden.
Die folgende Tabelle zeigt die Datentyp-Zuordnungstabelle. Mithilfe des DBTYPE-Indikators und seines DBCOLUMNFLAGS-Wertes einer Spalte können Sie den entsprechenden SQL Server-Datentyp ermitteln.
DBTYPE | DBCOLUMNFLAGS | SQL Server-Datentyp |
---|---|---|
DBTYPE_I1 |
numeric(3, 0)1 |
|
DBTYPE_I2 |
smallint |
|
DBTYPE_I4 |
int |
|
DBTYPE_I8 |
bigint |
|
DBTYPE_UI1 |
tinyint |
|
DBTYPE_UI1 |
numeric(5,0) |
|
DBTYPE_UI1 |
numeric(10,0) |
|
DBTYPE_UI1 |
numeric(20,0) |
|
DBTYPE_R4 |
float |
|
DBTYPE_R8 |
real |
|
DBTYPE_NUMERIC |
numeric |
|
DBTYPE_DECIMAL |
decimal |
|
DBTYPE_CY |
money |
|
DBTYPE_BSTR |
DBCOLUMNFLAGS_ISLONG = TRUE |
ntext |
DBTYPE_BSTR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = TRUE |
nchar |
DBTYPE_BSTR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = FALSE |
nvarchar |
DBTYPE_IDISPATCH |
Fehler |
|
DBTYPE_ERROR |
Fehler |
|
DBTYPE_BOOL |
bit |
|
DBTYPE_VARIANT |
nvarchar(4000) |
|
DBTYPE_IUNKNOWN |
Fehler |
|
DBTYPE_GUID |
uniqueidentifier |
|
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISLONG = true oder maximale Spaltenlänge > 8.000 Byte |
image |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISLONG = true und unbegrenzte Spaltenlänge |
varbinary(max) |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISROWVER = true, DBCOLUMNFLAGS_ISFIXEDLENGTH = true und Spaltenlänge = 8 |
timestamp |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISFIXEDLENGTH = TRUE |
binary |
DBTYPE_BYTES |
DBCOLUMNFLAGS_ISFIXEDLENGTH = FALSE |
varbinary |
DBTYPE_STR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = TRUE |
char |
DBTYPE_ STR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = FALSE |
varchar |
DBTYPE_STR |
DBCOLUMNFLAGS_ISLONG = true oder maximale Spaltenlänge > 8.000 Zeichen. |
text |
DBTYPE_STR |
DBCOLUMNFLAGS_ISLONG = true und unbegrenzte Spaltenlänge |
varchar(max) |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISFIXED |
nchar |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISFIXEDLENGTH = FALSE |
nvarchar |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISLONG = true oder maximale Spaltenlänge > 4.000 Zeichen. |
ntext |
DBTYPE_WSTR |
DBCOLUMNFLAGS_ISLONG = true und unbegrenzte Spaltenlänge |
nvarchar(max) |
DBTYPE_UDT |
Äquivalenter benutzerdefinierter SQL Server-Typ, wenn ein solcher registriert ist. |
|
DBTYPE_DATE |
datetime |
|
DBTYPE_DBDATE |
datetime (Kompatibilitätsgrad ist kleiner als 9,0) |
|
DBTYPE_DBTIME |
datetime |
|
DBTYPE_DBTIMESTAMP |
datetime |
|
DBTYPE_ARRAY |
Fehler |
|
DBTYPE_BYREF |
Wird ignoriert. |
|
DBTYPE_VECTOR |
Fehler |
|
DBTYPE_RESERVED |
Fehler |
|
DBTYPE_XML |
xml (Nur in Pass-Through-Abfragen zulässig.) |
1numeric(p,s) gibt den SQL Server-Datentyp numeric mit Genauigkeit p und s Dezimalstellen an.
Hinweis: |
---|
Wenn die Daten in einen SQL Server-Datentyp konvertiert werden müssen, der sich vom gezeigten Standarddatentyp unterscheidet, ist eine explizite Konvertierung mithilfe der CAST- oder CONVERT-Funktion erforderlich. Weitere Informationen finden Sie unter CAST und CONVERT (Transact-SQL). |
Die DBTYPE-Indikator- und DBCOLUMNFLAGS-Wertinformationen stammen über das COLUMNS-Schemarowset oder die IColumnsInfo-Schnittstelle vom Anbieter. Im Fall des COLUMNS-Schemarowsets stellen die DATA_TYPE- und die COLUMN_FLAGS-Spalte die DBTYPE- und DBCOLUMNFLAGS-Werte dar. Im Fall der IColumnsInfo::GetColumnInfo-Schnittstelle stellen die wType- und dwFlags-Elemente der DBCOLUMNINFO-Struktur diese Werte dar.
Datentypzuordnung von SQL Server zum OLE DB-Anbieter
SQL Server-Systemdatentypen werden OLE DB-Datentypen mithilfe der in der vorherigen Tabelle gezeigten Zuordnung zugeordnet. Die Zuordnung eines SQL Server-Typs S1 zu einem OLE DB-Typ T ist zulässig, wenn eine der folgenden Bedingungen gegeben ist:
- Die entsprechende Zuordnung ist in der Datentyp-Zuordnungstabelle aufgeführt.
- Es wird eine zulässige, implizite Konvertierung des Datentyps S1 in einen anderen SQL Server-Datentyp S2 durchgeführt, und die Zuordnung von S2 zu T ist in der Datentyp-Zuordnungstabelle definiert.
Siehe auch
Konzepte
Richtlinien für die Verwendung von verteilten Abfragen
Verteilte Abfragen