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.

ms175970.note(de-de,SQL.90).gifHinweis:
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

Andere Ressourcen

Datentypen (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005