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 |
Zobacz także