Mapeamento de tipos de dados em conjuntos de linhas e parâmetros
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Em conjuntos de linhas e como valores de parâmetro, o OLE DB Driver for SQL Server representa dados do SQL Server usando os tipos de dados do OLE DB definidos a seguir, relatados nas funções IColumnsInfo::GetColumnInfo e ICommandWithParameters::GetParameterInfo.
Tipo de dados do SQL Server | Tipo de dados OLE DB |
---|---|
bigint | DBTYPE_I8 |
binary | DBTYPE_BYTES |
bit | DBTYPE_BOOL |
char | DBTYPE_STR |
datetime | DBTYPE_DBTIMESTAMP |
datetime2 | DBTYPE_DBTIMESTAMP |
decimal | DBTYPE_NUMERIC |
float | DBTYPE_R8 |
imagem | DBTYPE_BYTES |
int | DBTYPE_I4 |
money | DBTYPE_CY |
nchar | DBTYPE_WSTR |
ntext | DBTYPE_WSTR |
numeric | DBTYPE_NUMERIC |
nvarchar | DBTYPE_WSTR |
real | DBTYPE_R4 |
smalldatetime | DBTYPE_DBTIMESTAMP |
smallint | DBTYPE_I2 |
smallmoney | DBTYPE_CY |
sql_variant | DBTYPE_VARIANT, DBTYPE_SQLVARIANT |
sysname | DBTYPE_WSTR |
text | DBTYPE_STR |
timestamp | DBTYPE_BYTES |
tinyint | DBTYPE_UI1 |
UDT | DBTYPE_UDT |
uniqueidentifier | DBTYPE_GUID |
varbinary | DBTYPE_BYTES |
varchar | DBTYPE_STR |
XML | DBTYPE_XML |
O Driver do OLE DB para SQL Server dá suporte a conversões de dados solicitadas pelo consumidor, como mostrado na ilustração.
Os objetos sql_variant podem armazenar qualquer tipo de dados do SQL Server, exceto text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp e os tipos CLR (Common Language Runtime) definidos pelo usuário do Microsoft .NET Framework. Uma instância de dados sql_variant também não pode ter sql_variant como seu tipo de dados base subjacente. Por exemplo, a coluna pode conter valores smallint em algumas linhas, valores float em outras linhas e valores char/nchar no restante.
Observação
O tipo de dados sql_variant é semelhante ao tipo de dados Variant no Visual Basic e no DBTYPE_VARIANT, DBTYPE_SQLVARIANT no OLEDB.
Quando dados sql_variant são buscados como DBTYPE_VARIANT, eles são colocados em uma estrutura VARIANT no buffer. Mas os subtipos na estrutura VARIANT podem não ser mapeados para os subtipos definidos no tipo de dados sql_variant. Os dados sql_variant precisam ser buscados como DBTYPE_SQLVARIANT para que todos os subtipos obtenham uma correspondência.
Tipo de dados DBTYPE_SQLVARIANT
Para dar suporte ao tipo de dados sql_variant, o OLE DB Driver for SQL Server expõe um tipo de dados específico do provedor chamado DBTYPE_SQLVARIANT. Quando dados sql_variant são buscados como DBTYPE_SQLVARIANT, eles são armazenados em uma estrutura SSVARIANT específica do provedor. A estrutura SSVARIANT contém todos os subtipos que correspondem aos subtipos do tipo de dados sql_variant.
A propriedade de sessão SSPROP_ALLOWNATIVEVARIANT também deve ser definida como TRUE.
Propriedade específica de provedor SSPROP_ALLOWNATIVEVARIANT
Ao buscar dados, você pode especificar explicitamente que tipo de dados deveria ser retornado para uma coluna ou um parâmetro. IColumnsInfo também pode ser usado para obter informações sobre colunas e usá-las para fazer a associação. Quando IColumnsInfo é usado para obter informações sobre colunas para fins de associação, se a propriedade de sessão SSPROP_ALLOWNATIVEVARIANT for FALSE (valor padrão), DBTYPE_VARIANT será retornado para colunas sql_variant. Se a propriedade SSPROP_ALLOWNATIVEVARIANT for FALSE, não haverá suporte para DBTYPE_SQLVARIANT. Se a propriedade SSPROP_ALLOWNATIVEVARIANT for definida como TRUE, o tipo de coluna será retornado como DBTYPE_SQLVARIANT; nesse caso o buffer armazenará a estrutura SSVARIANT. No fetch de dados sql_variant como DBTYPE_SQLVARIANT, a propriedade de sessão SSPROP_ALLOWNATIVEVARIANT precisa ser definida como TRUE.
A propriedade SSPROP_ALLOWNATIVEVARIANT faz parte do conjunto de propriedades DBPROPSET_SQLSERVERSESSION específicas de provedor, sendo uma propriedade de sessão.
DBTYPE_VARIANT se aplica a todos os outros provedores OLE DB.
SSPROP_ALLOWNATIVEVARIANT
SSPROP_ALLOWNATIVEVARIANT é uma propriedade de sessão e faz parte do conjunto de propriedades DBPROPSET_SQLSERVERSESSION.
Propriedade | Descrição |
---|---|
SSPROP_ALLOWNATIVEVARIANT | Tipo: VT_BOOL Leitura/gravação: leitura/gravação Padrão: VARIANT_FALSE Descrição: Determina se os dados buscados são como DBTYPE_VARIANT ou DBTYPE_SQLVARIANT. VARIANT_TRUE: o tipo de coluna é retornado como DBTYPE_SQLVARIANT e o buffer terá a estrutura SSVARIANT. VARIANT_FALSE: o tipo de coluna é retornado como DBTYPE_VARIANT e o buffer terá a estrutura VARIANT. |