Condividi tramite


Mapping dei tipi di dati con le query distribuite

Un provider OLE DB espone i tipi di dati utilizzando gli identificatori dei tipi OLE DB denominati DBTYPE. Tramite l'operazione di mapping è possibile eseguire le seguenti conversioni tra tipi di dati OLE DB e i tipi di dati di sistema di SQL Server:

  • Da tipi di dati OLE DB a tipi di dati di sistema di SQL Server. Questa conversione viene eseguita quando SQL Server legge i dati dell'origine dei dati OLE DB tramite istruzioni SELECT o nella fase di lettura delle istruzioni UPDATE, INSERT o DELETE.
  • Da tipi di dati di sistema di SQL Server a tipi di dati OLE DB. Questo tipo di conversione viene eseguita quando SQL Server scrive i dati, in genere tramite istruzioni INSERT o UPDATE, nell'origine dei dati OLE DB in cui la tabella modificata è una tabella remota.

Mapping dei tipi di dati tra il provider OLE DB e SQL Server

Il mapping dei tipi di dati tra il provider OLE DB e SQL Server definisce le espressioni e i confronti consentiti, nonché le conversioni esplicite valide che coinvolgono dati remoti. Questo tipo di mapping è illustrato nella tabella seguente.

La validità dei tipi di dati delle colonne di una tabella remota utilizzati nelle espressioni è determinata da una semplice regola, in base alla quale il valore di una colonna remota è valido in un'espressione Transact-SQL se nello stesso contesto è valido anche il tipo di dati di SQL Server corrispondente definito nella tabella del mapping dei tipi di dati.

Ad esempio, si consideri l'espressione local_column OPERATOR remote_column. Nell'espressione,local_column è una colonna di una tabella locale e remote_column è una colonna di una tabella remota. L'espressione è valida se OPERATOR è un operatore valido per il tipo di dati della colonna locale e per il tipo di dati al quale è mappato il tipo di dati DBTYPE di remote_column.

Allo stesso modo, l'espressione CAST(remote_column AS data_type_1) è consentita se il tipo di dati DBTYPE di remote_column è mappato al tipo di dati di sistema di SQL Server data_type_2 e se è consentita la conversione esplicita da data_type_2 a data_type_1. Ad esempio, una colonna con il tipo di dati DBTYPE_DATE nel provider può essere convertita in una colonna di tipo datetime in SQL Server. La conversione diretta di dati DBTYPE_DATE in varchar non è tuttavia consentita.

Nella tabella seguente è illustrata la tabella relativa al mapping dei tipi di dati. Tramite l'indicatore DBTYPE e il relativo valore DBCOLUMNFLAGS di una colonna, è possibile trovare il tipo di dati di SQL Server corrispondente.

DBTYPE DBCOLUMNFLAGS Tipo di dati di 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

Errore

DBTYPE_ERROR

Errore

DBTYPE_BOOL

bit

DBTYPE_VARIANT

nvarchar(4000)

DBTYPE_IUNKNOWN

Errore

DBTYPE_GUID

uniqueidentifier

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true o dimensioni massime della colonna > 8.000 byte.

image

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true e dimensioni della colonna illimitate.

varbinary(max)

DBTYPE_BYTES

DBCOLUMNFLAGS_ISROWVER = true, DBCOLUMNFLAGS_ISFIXEDLENGTH = true, dimensioni della colonna = 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 o dimensioni massime della colonna > 8.000 caratteri.

text

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = true e dimensioni della colonna illimitate.

varchar(max)

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXED

nchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true o dimensioni massime della colonna > 4.000 caratteri.

ntext

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true e dimensioni della colonna illimitate.

nvarchar(max)

DBTYPE_UDT

Tipo di SQL Server definito dall'utente, se registrato.

DBTYPE_DATE

datetime

DBTYPE_DBDATE

datetime (Il livello di compatibilità è inferiore a 9.0)

DBTYPE_DBTIME

datetime

DBTYPE_DBTIMESTAMP

datetime

DBTYPE_ARRAY

Errore

DBTYPE_BYREF

Ignorato

DBTYPE_VECTOR

Errore

DBTYPE_RESERVED

Errore

DBTYPE_XML

xml (Consentito solo nelle query pass-through)

1numeric(p,s) indica il tipo di dati di SQL Server numeric con precisione p e scala s.

[!NOTA] Se è necessario convertire i dati in un tipo di dati di SQL Server diverso dal tipo predefinito indicato nella tabella, è necessario eseguire una conversione esplicita tramite la funzione CAST o CONVERT. Per ulteriori informazioni, vedere CAST e CONVERT (Transact-SQL).

Le informazioni relative all'indicatore DBTYPE e al valore DBCOLUMNFLAGS sono derivate dal provider tramite il set di righe dello schema COLUMNS o l'interfaccia IColumnsInfo. Per il set di righe dello schema COLUMNS, le colonne DATA_TYPE e COLUMN_FLAGS rappresentano i valori DBTYPE e DBCOLUMNFLAGS. Per l'interfaccia IColumnsInfo::GetColumnInfo, i membri wType e dwFlags della struttura DBCOLUMNINFO rappresentano tali valori.

Mapping dei tipi di dati tra SQL Server e il provider OLE DB

I tipi di dati di sistema di SQL Server vengono mappati ai tipi OLE DB tramite il mapping mostrato nella tabella precedente. Il mapping di un tipo di dati di SQL Server S1 a un tipo OLE DB specifico T è consentito solo se si verifica una delle condizioni seguenti:

  • Il mapping corrispondente è disponibile nella tabella del mapping dei tipi di dati.
  • È consentita la conversione implicita del tipo di dati S1 in un altro tipo di dati di SQL Server S2 e il mapping tra S2 e T è definito nella tabella del mapping dei tipi di dati.

Vedere anche

Concetti

Linee guida per l'utilizzo di query distribuite
Query distribuite

Altre risorse

Tipi di dati (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005