Partilhar via


Metadados - Parâmetro e conjunto de linhas no SQL Server Native Client

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Este tópico fornece informações sobre o tipo e os membros de tipo a seguir, relacionados aos aprimoramentos de data e hora de OLE DB.

  • Estrutura DBBINDING

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

As seguintes informações são retornadas na estrutura DBPARAMINFO por meio de prgParamInfo:

Tipo de parâmetro wType ulParamSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Liberada
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
datetime2 DBTYPE_DBTIMESTAMP 16 19,21..27 0..7 Definir
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26,28..34 0..7 Definir

Observe que em alguns casos os intervalos de valores não são contínuos. Isso se deve à adição de um ponto decimal quando a precisão fracionária é maior que zero.

DBPARAMFLAGS_SS_ISVARIABLESCALE só é válido quando conectado a um servidor SQL Server 2008 (10.0.x) (ou posterior). DBPARAMFLAGS_SS_ISVARIABLESCALE nunca é definido quando conectado a servidores de nível inferior.

ICommandWithParameters::SetParameterInfo e tipos de parâmetro implícitos

As informações fornecidas na estrutura DBPARAMBINDINFO devem estar de acordo com o seguinte:

pwszDataSourceType

(específico do provedor)
pwszDataSourceType

(OLE DB genérico)
ulParamSize bScale
DBTYPE_DATE 6 Ignored
date DBTYPE_DBDATE 6 Ignored
DBTYPE_DBTIME 10 Ignored
time DBTYPE_DBTIME2 10 0..7
smalldatetime 16 Ignored
DATETIME 16 Ignored
datetime2 ou DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP 16 0..7
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 0..7

O parâmetro bPrecision é ignorado.

"DBPARAMFLAGS_SS_ISVARIABLESCALE" é ignorado ao enviar dados ao servidor. Os aplicativos podem forçar o uso de tipos do protocolo TDS herdados usando os nomes de tipo específicos do provedor "datetime" e "smalldatetime". Quando conectado a servidores SQL Server 2008 (10.0.x) (ou posterior), o formato "datetime2" será usado e uma conversão implícita de servidor ocorrerá, se necessário, quando o nome do tipo for "datetime2" ou "DBTYPE_DBTIMESTAMP". bScale será ignorado se os nomes "datetime" ou "smalldatetime" específicos do provedor forem usados. Caso contrário, os aplicativos devem garantir que bScale esteja definido corretamente. Os aplicativos atualizados do MDAC e do SQL Server Native Client do SQL Server 2005 (9.x) que usam "DBTYPE_DBTIMESTAMP" falharão se não definirem o bScale corretamente. Quando você estiver conectado a instâncias do servidor anteriores ao SQL Server 2008 (10.0.x), um valor bScale diferente de 0 ou 3 com "DBTYPE_DBTIMESTAMP" será considerado um erro e E_FAIL será retornado.

Quando ICommandWithParameters::SetParameterInfo não é chamado, o provedor implementa o tipo de servidor do tipo de associação, conforme especificado em IAccessor::CreateAccessor da seguinte maneira:

Tipo de associação pwszDataSourceType

(específico do provedor)
DBTYPE_DATE datetime2(0)
DBTYPE_DBDATE date
DBTYPE_DBTIME time(0)
DBTYPE_DBTIME2 time(7)
DBTYPE_DBTIMESTAMP Datetime2 (7)
DBTYPE_DBTIMESTAMPOFFSET datetimeoffset(7)

IColumnsRowset::GetColumnsRowset

IColumnsRowset::GetColumnsRowset retorna as seguintes colunas:

Tipo de coluna DBCOLUMN_TYPE DBCOLUM_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Liberada
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Definir
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Definir

Em DBCOLUMN_FLAGS, DBCOLUMNFLAGS_ISFIXEDLENGTH é sempre true para os tipos de data/hora e os seguintes sinalizadores são sempre false:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER

  • DBCOLUMNFLAGS_MAYDEFER

Os sinalizadores restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) podem ser definidos, dependendo de como a coluna é definida e da consulta propriamente dita.

Um novo sinalizador DBCOLUMNFLAGS_SS_ISVARIABLESCALE é fornecido em DBCOLUMN_FLAGS para permitir que um aplicativo determine o tipo de servidor de colunas, onde DBCOLUMN_TYPE é DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE ou DBCOLUMN_DATETIMEPRECISION também deve ser usado para identificar o tipo de servidor.

DBCOLUMNFLAGS_SS_ISVARIABLESCALE só é válido quando conectado a um servidor SQL Server 2008 (10.0.x) (ou posterior). DBCOLUMNFLAGS_SS_ISVARIABLESCALE é indefinido quando conectado a servidores de nível inferior.

IColumnsInfo::GetColumnInfo

A estrutura DBCOLUMNINFO retorna as seguintes informações:

Tipo de parâmetro wType ulColumnSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Liberada
time(1..7) DBTYPE_DBTIME2 10 8, 10..16 0..7 Definir
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Liberada
DATETIME DBTYPE_DBTIMESTAMP 16 23 3 Liberada
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Definir
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Definir

Em dwFlags, DBCOLUMNFLAGS_ISFIXEDLENGTH sempre tem o valor verdadeiro para os tipos de data/hora e os seguintes sinalizadores sempre têm o valor falso:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER, MAYDEFER

Os sinalizadores restantes (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) podem ser definidos.

Um novo sinalizador, DBCOLUMNFLAGS_SS_ISVARIABLESCALE, é fornecido em dwFlags para permitir que um aplicativo determine o tipo de servidor de colunas, em que wType é DBTYPE_DBTIMESTAMP. bScale também precisa ser usado para identificar o tipo de servidor.

Confira também

Metadados (OLE DB)