Compartilhar via


Atualizando um aplicativo do SQL Server 2005 Native Client para o SQL Server 2008 R2 Native Client

Este tópico discute as últimas alterações no SQL Server Native Client desde o SQL Server Native Client no SQL Server 2005.

Quando atualizar do MDAC (Microsoft Data Access Components) para o SQL Server Native Client, você também poderá observar algumas diferenças de comportamento. Para obter mais informações, consulte Atualizando um aplicativo do MDAC para o SQL Server Native Client.

Comportamento alterado no SQL Server 10.0 Native Client 10.0

Descrição

O OLE DB preenche apenas até a escala definida.

Para conversões em que os dados convertidos são enviados ao servidor, o SQL Server Native Client 10.0 preenche zeros à direita nos dados apenas até o comprimento máximo dos valores de datetime. O SQL Server Native Client 9.0 e versões anteriores preenchiam até nove dígitos.

Validar DBTYPE_DBTIMESTAMP para ICommandWithParameter::SetParameterInfo.

O SQL Server Native Client 10.0 implementa o requisito OLE DB de que bScale em ICommandWithParameter::SetParameterInfo seja definido como a precisão dos segundos fracionários para DBTYPE_DBTIMESTAMP.

Agora, o procedimento armazenado sp_columns retorna "NO" em vez de "NO " para a coluna IS_NULLABLE.

No SQL Server Native Client 10.0, agora o procedimento armazenado sp_columns retorna "NO" em vez de "NO " para uma coluna IS_NULLABLE.

SQLSetDescRec, SQLBindParameter e SQLBindCol agora executam uma verificação de consistência.

Antes do SQL Server Native Client 10.0, a configuração de SQL_DESC_DATA_PTR não causava uma verificação de consistência para qualquer tipo de descritor em SQLSetDescRec, SQLBindParameter ou SQLBindCol.

Agora, SQLCopyDesc faz uma verificação de consistência do descritor.

Antes do SQL Server Native Client 10.0, SQLCopyDesc não fazia uma verificação de consistência quando o campo SQL_DESC_DATA_PTR estava definido em um registro específico.

SQLGetDescRec não faz mais uma verificação de consistência do descritor.

Antes do SQL Server Native Client 10.0, SQLGetDescRec executava uma verificação de consistência do descritor quando o campo SQL_DESC_DATA_PTR estava definido. Isso não era exigido pela especificação ODBC e, no SQL Server Native Client 10.0, essa verificação de consistência não é mais executada.

Erro diferente retornado quando a data está fora do intervalo.

Para o tipo datetime, o SQL Server Native Client 10.0 retornará um número de erro diferente do retornado em versões anteriores para uma data fora do intervalo.

Especificamente, o SQL Server Native Client 9.0 retornava 22007 para todos os valores de ano fora do intervalo em conversões de cadeia de caracteres em datetime, e o SQL Server Native Client 10.0 retorna 22008 quando a data está dentro do intervalo aceito por datetime2, mas fora do intervalo aceito por datetime ou smalldatetime.

O valor datetime trunca segundos fracionários e não arredondará se o arredondamento alterar o dia.

Antes do SQL Server Native Client 10.0, o comportamento do cliente para valores datetime enviados para o servidor era arredondá-los para o 1/300º de segundo mais próximo. No SQL Server Native Client 10.0, esse cenário causará um truncamento de segundos fracionários se o arredondamento alterar o dia.

Possível truncamento de segundos para o valor de datetime.

Um aplicativo compilado com o SQL Server 2008 Native Client (ou posterior) que se conecta a um servidor SQL Server 2005 (ou anterior) truncará segundos e segundos fracionários na parte de hora dos dados enviados ao servidor se for feita uma associação com uma coluna datetime com o identificador de tipo DBTYPE_DBTIMESTAMP (OLE DB) ou SQL_TIMESTAMP (ODBC) e uma escala de 0.

Por exemplo:

Dados de entrada: 1994-08-21 21:21:36.000

Dados inseridos: 1994-08-21 21:21:00.000

A conversão de dados OLE DB de DBTYPE_DBTIME em DBTYPE_DATE não faz mais com que o dia seja alterado.

Antes do SQL Server Native Client 10.0, se a parte de hora de DBTYPE_DATE estivesse dentro de meio segundo de meia-noite, o código de conversão OLE DB fazia com que o dia fosse alterado. No SQL Server Native Client 10.0, o dia não será alterado (segundos fracionários são truncados e não são arredondados).

Alterações em conversões IBCPSession::BCColFmt.

No SQL Server Native Client 10.0, quando você usar IBCPSession::BCOColFmt para converter SQLDATETIME ou SQLDATETIME em um tipo de cadeia de caracteres, um valor fracionário será exportado. Por exemplo, na conversão do tipo SQLDATETIME no tipo SQLNVARCHARMAX, versões anteriores do SQL Server Native Client retornavam

1989-02-01 00:00:00. O SQL Server Native Client 10.0 retorna 1989-02-01 00:00:00.0000000.

O tamanho dos dados enviados deve corresponder ao comprimento especificado em SQL_LEN_DATA_AT_EXEC.

Quando SQL_LEN_DATA_AT_EXEC for usado, o tamanho dos dados deverá corresponder ao comprimento especificado com SQL_LEN_DATA_AT_EXEC. Você pode usar SQL_DATA_AT_EXEC, mas existem benefícios de desempenho potenciais em usar SQL_LEN_DATA_AT_EXEC.

Os aplicativos personalizados que usam a API BCP agora podem ver um aviso.

A API BCP gerará uma mensagem de aviso se o comprimento dos dados for maior do que o comprimento especificado para um campo para todos os tipos. Anteriormente, esse aviso era fornecido apenas para tipos de caracteres, mas não será emitido para todos os tipos.

Inserir uma cadeia de caracteres vazia em uma associação sql_variant como um tipo de data/hora gera um erro.

No SQL Server Native Client 9.0, inserir uma cadeia de caracteres vazia em uma associação sql_variant como um tipo de data/hora não gerava um erro. O SQL Server Native Client 10.0 gera um erro corretamente nessa situação.

Validação mais rígida dos parâmetros SQL_C_TYPE _TIMESTAMP e DBTYPE_DBTIMESTAMP.

Antes do SQL Server 2008 Native Client, os valores de datetime eram arredondados para se ajustar à escala de colunas datetime e smalldatetime pelo SQL Server. O SQL Server 2008 Native Client (bem como as versões posteriores) aplica as regras de validação mais rígidas que são definidas na especificação ODBC principal para segundos fracionários. Se não for possível converter um valor de parâmetro no tipo SQL usando a escala especificada ou implícita pela associação de cliente sem truncamento de dígitos à direita, será retornado um erro.

O SQL Server pode retornar resultados diferentes quando um gatilho é executado.

As alterações introduzidas no SQL Server 2008 podem fazer com que um aplicativo retorne diferentes resultados de uma instrução que causou a execução de um gatilho quando NOCOUNT OFF estava em vigor. Nessa situação, o aplicativo pode gerar um erro. Para corrigi-lo, defina NOCOUNT ON no gatilho ou chame SQLMoreResults para passar para o próximo resultado.

Consulte também

Outros recursos