Udostępnij za pośrednictwem


Mapowanie typu danych z kwerend rozproszonych

Dostawca OLE DB udostępnia typów danych według identyfikatorów typu OLE DB o nazwie DBTYPEs.Typy danych są konwertowane między typami danych OLE DB i SQL Server typów danych przez mapowanie danych:

  • Z typów danych OLE DB do SQL Server system typów danych.Ta konwersja nastąpi po SQL Server odczytuje dane ze źródło danych OLE DB w instrukcji SELECT lub UPDATE, INSERT po stronie odczytu lub usuwanie instrukcji.

  • Z SQL Server typów danych do typów danych OLE DB.Ta konwersja nastąpi po SQL Server zapisuje dane, głównie w instrukcji INSERT lub UPDATE do źródło danych OLE DB jest tabela zmodyfikowana tabela zdalna.

Mapowanie typu danych z dostawcy OLE DB do programu SQL Server

Mapowanie typu danych z dostawca OLE DB, do SQL Server definiuje dozwolone porównań i wyrażeń i prawidłowe Konwersje jawne, obejmujących dane zdalne.Mapowanie jest wyświetlany w tabela poniżej.

Ważność typu dla kolumn tabela zdalna w wyrażeniach mogą być podsumowywane przez następującą regułę: Wartość kolumna zdalnego jest prawidłowa w Transact-SQL wyrażenia, jeśli odpowiadające im mapowanych SQL Server Typ danych w tabela mapowania typów danych jest nieprawidłowy w tym samym kontekście.

Rozważmy na przykład wyrażenie: local_column OPERATOR remote_column. W tym wyrażenie*,* local_column jest kolumna tabeli lokalnej i remote_column jest kolumna tabela zdalna.Wyrażenie jest prawidłowe Jeśli operatora jest nieprawidłowy operator dla typu danych kolumna lokalnych i typu danych, do której DBTYPE z remote_column mapy.

Podobnie, ODDANYCH (remote_column jako data_type_1) jest dozwolone, jeśli DBTYPE z remote_column mapuje SQL Server Typ danych systemu data_type_2 i konwersja jawna z data_type_2 do data_type_1 jest dozwolona.Na przykład kolumna typu danych DBTYPE_DATE po stronie dostawca można przekonwertować na datetime kolumna w SQL Server.Jednak dane DBTYPE_DATE nie może przekonwertować bezpośrednio do varchar.

W poniższej tabela przedstawiono w tabela mapowania typów danych.Przy użyciu wskaźnika DBTYPE i jego wartość DBCOLUMNFLAGS kolumna, można znaleźć odpowiedniego SQL Server typu danych.

TYP DBTYPE

DBCOLUMNFLAGS

Typ danych programu SQL Server

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

Błąd

DBTYPE_ERROR

Błąd

DBTYPE_BOOL

bit

DBTYPE_VARIANT

nvarchar(4000)

DBTYPE_IUNKNOWN

Błąd

DBTYPE_GUID

uniqueidentifier

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = rozmiar kolumna PRAWDA lub maksymalna > 8000 bajtów.

image

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true i kolumna rozmiar jest nieograniczonej długości.

varbinary(max)

DBTYPE_BYTES

DBCOLUMNFLAGS_ISROWVER = true, DBCOLUMNFLAGS_ISFIXEDLENGTH = true, rozmiar kolumna = 8

timestamp

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

binary

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varbinary

TYPEM DBTYPE_STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

char

DBTYPE_ STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varchar

TYPEM DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = rozmiar kolumna PRAWDA lub maksymalna > 8000 znaków.

text

TYPEM DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = true i kolumna rozmiar jest nieograniczonej długości.

varchar(max)

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXED

nchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = rozmiar kolumna PRAWDA lub maksymalna > 4 000 znaków.

ntext

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true i kolumna rozmiar jest nieograniczonej długości.

nvarchar(max)

DBTYPE_UDT

Równoważne SQL Server typ zdefiniowany przez użytkownika, jeśli jedna jest zarejestrowana.

DBTYPE_DATE

date, datetime, datetime2, datetimeoffset

DBTYPE_DBDATE

date, datetime, datetime2, datetimeoffset (Poziom zgodności jest mniejsza niż 9.0).

DBTYPE_DBTIME

time, datetime, datetime2, datetimeoffset

DBTYPE_DBTIME_EX

time, datetime2, datetimeoffset

DBTYPE_DBTIMESTAMP

time, date, datetime2, datetimeoffset, datetime

DBTYPE_DBTIMESTAMP

time, date, datetime2, datetimeoffset

DBTYPE_DBTIMESTAMP

time, date, datetime2, datetimeoffset

DBTYPE_ARRAY

Błąd

TYP DBTYPE_BYREF

Ignorowany

UŻYTO SAMEGO TYPU DBTYPE_VECTOR

Błąd

DBTYPE_RESERVED

Błąd

DBTYPE_XML

xml (Dozwolone tylko w przypadku kwerend przekazujących.)

1numeric(p,s) indicates the SQL Server data type numeric with precision p and scale s.

Ostrzeżenie

Jeżeli dane muszą być przekonwertowana na SQL Server wymagany jest typ danych, który różni się od pokazano domyślny, konwersja jawna, używając funkcja RZUTOWANIA lub konwersji.Aby uzyskać więcej informacji, zobacz CAST i CONVERT (Transact-SQL).

Wartość wskaźnika DBTYPE i DBCOLUMNFLAGS informacji pochodzi od dostawca przy użyciu dowolnego kolumn zestaw zestaw wierszy schematu lub za pomocą IColumnsInfo interfejs.Dla kolumn zestaw zestaw wierszy schematu, DATA_TYPE i COLUMN_FLAGS kolumny reprezentują wartości DBTYPE i DBCOLUMNFLAGS.Dla IColumnsInfo::GetColumnInfo interfejs, wType i dwFlags struktury DBCOLUMNINFO reprezentują te wartości.

Typ danych mapowania z SQL Server do dostawcy OLE DB

SQL Server OLE DB typów mapowania typów danych systemu przy użyciu mapowania pokazane w powyższej tabela.Mapowanie z SQL Server typu S1 do określonego typu DB OLE t jest dozwolona, jeśli istnieje jeden z tych warunków:

  • Odpowiadające im mapowanie można znaleźć w tabela mapowania typów danych.

  • Jest dozwolone, niejawna konwersja typu danych S1 do innego SQL Server Typ danych S2 i mapowanie z S2 do t jest zdefiniowany w tabela mapowania typów danych.

SQL Server 2008 mapowanie datę i godzinę otrzymany z serwera zdalnego

Tabela poniżej zawiera date i time Typ danych mapowania dla danych wysyłanych ze źródło danych OLE DB do wystąpienie SQL Server 2008.Ta konwersja nastąpi po SQL Server 2008 odczytuje dane ze źródło danych OLE DB w instrukcji SELECT lub czytania po stronie instrukcji UPDATE, INSERT lub DELETE. Jeśli kolumna zdalnego jest date, time, dateime2, lub datetimeoffset Typ danych, że typ jest zwracana, jeśli poziom zgodności bazy danych jest 100 lub wyższej.Jeśli poziom zgodności jest niższa, SQL Server 2008 sprawia, że jawna konwersja na datetime.

Typ OLE DB

Jeśli zdalny serwer SQL Server 2008

zwrotu:

Jeśli zdalny serwer SQL Server 2005 lub SQL Server 2000 zwrotu:

Jeśli serwer zdalny nie SQL Server i lokalne poziom zgodności bazy danych programu SQL Server 2008 jest 90 zwrotu:

Jeśli serwer zdalny nie SQL Server i lokalne poziom zgodności bazy danych programu SQL Server 2008 jest 100 zwrotu:

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

datetime(kolumna zdalnego może być datetime or smalldatetime)

datetime(kolumna zdalnego może być datetime or smalldatetime)

datetime

datetime2(7)

DBTYPE_DBTIMESTAMP z dwFlags są zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

datetime2

Nie dotyczy

Nie dotyczy

Nie dotyczy

DBTYPE_DBDATE

date

Nie dotyczy

datetime

date

DBTYPE_DBTIME

time(0)

Nie dotyczy

datetime

time(0)

DBTYPE_DBTIME2

time(n)

Nie dotyczy

Nie dotyczy

Nie dotyczy

DBTYPE_DBTIMESTAMPOFFSET

datetimeoffset

Nie dotyczy

Nie dotyczy

Nie dotyczy

SQL Server 2008 mapowanie datę i godzinę wysyłane do serwera zdalnego

Tabela poniżej zawiera date i time Typ danych mapowania dane wysyłane z wystąpienie SQL Server 2008 do obiekt docelowy danych OLE DB.Ta konwersja nastąpi po SQL Server 2008 zapisuje dane, głównie w instrukcji INSERT lub UPDATE do źródło danych OLE DB jest tabela zmodyfikowana tabela zdalna.

Typ danych programu SQL Server 2008

Jeśli zdalny serwer SQL Server 2008

powiązanie z:

Jeśli zdalny serwer SQL Server 2005 lub SQL Server 2000 powiązania z:

Jeśli serwer zdalny nie jest powiązanie programu SQL Server z:

datetime, smalldatetime

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

datetime2(n)

DBTYPE_DBTIMESTAMP z dwFlags są zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

date

DBTYPE_DBDATE

DBTYPE_DBDATE

DBTYPE_DBDATE

time(0)

DBTYPE_DBTIME

DBTYPE_DBTIME

DBTYPE_DBTIME

time(n)(0 < n <= 7)

DBTYPE_DBTIMESTAMP (z czasu część data)

z czym dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP bez dwFlags zestaw jako DBPARAMFLAGS_SS_ISVARIABLESCALE

DBTYPE_DBTIMESTAMP (z czasu część data)

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

Nie dotyczy

Nie dotyczy

SQL Server 2008 zdalne wykonywanie kwerend z datą i typy danych czasu

SQL Server 2008Wykonuje kwerendy odwołujące się do zdalnego obiektów mających time, date, datetime2, lub datetimoffset typów danych na lokalnym lub zdalnym serwerem.Decyzja zależy od wersja lub dostawca serwera zdalnego i typ odwołania.Typy odwołań uważane za są zdalnego kolumna lub stała, zmienna lub lokalnym.

-Z SQL Server dostawców

Obsługa jest częściowa dla time, date, i datetime2 typy danych, gdy istnieją podobne typy na serwerze zdalnym dla nie-SQL Server dostawców.Ci dostawcy nie ma sposób deklarowania swoje poparcie dla tych typów.

Poniższa tabela pokazuje, czy kwerenda jest wykonywana na serwerze lokalnym lub zdalnym.Pierwszej kolumny zawierają typ danych na serwerze lokalnym.Druga kolumna zawiera odpowiedni typ danych OLE DB lokalnego wystąpienie SQL Server 2008 korzysta z serwera zdalnego.Ostatnie trzy kolumny pokazuje, czy kwerenda jest wykonywany na serwerze lokalnym lub zdalnym.Lokalizacja wykonanie zależy od wersja lub typ serwera zdalnego.

Typ danych lokalnego serwera

Serwer zdalny typ danych OLE DB, który jest używany przez lokalnego programu SQL Server 2008

SQL Server 2008 lub nowsza wersja serwera zdalnego

Zdalny serwer SQL Server 2005

Serwer zdalny nie MSSQL

datetime

DBTYPE_DBTIMESTAMP

Zdalne

Zdalne

Zdalne

smalldatetime

DBTYPE_DBTIMESTAMP

Zdalne

Zdalne

Zdalne

datetime2

DBTYPE_DBTIMESTAMP

Zdalne

Lokalne

Zdalne

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

Zdalne

Lokalne

Lokalne

date

DBTYPE_DBDATE

Zdalne

Lokalne

Zdalne

time(>0)

DBTYPE_DBTIME2

Zdalne

Lokalne

Lokalne

time(0)

DBTYPE_DBTIME2

Zdalne

Lokalne

Zdalne