Atualizando um aplicativo no SQL Server 2005 Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Importante

O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento de aplicativo. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) ou o Microsoft ODBC Driver for SQL Server mais recente no futuro. Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), consulte esta exceção de Ciclo de Vida de Suporte.

Este tópico discute as alterações interruptivas no SQL Server Native Client desde SQL Server Native Client no SQL Server 2005 (9.x).

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

SQL Server Native Client 9.0 fornecido com o SQL Server 2005 (9.x). SQL Server Native Client 10.0 fornecido com o SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 fornecido com o SQL Server 2008 R2 (10.50.x). SQL Server Native Client 11.0 fornecido com o SQL Server 2012 (11.x) e o SQL Server 2014 (12.x).

Comportamento alterado em SQL Server Native Client desde SQL Server 2005 (9.x) DESCRIÇÃO
O OLE DB preenche apenas até a escala definida. Para conversões em que os dados convertidos são enviados para o servidor, SQL Server Native Client (começando em SQL Server 2008 (10.0.x)) preenche zeros à direita em dados apenas até o comprimento máximo dos valores datetime. O SQL Server Native Client 9.0 e preenchia até nove dígitos.
Validar DBTYPE_DBTIMESTAMP para ICommandWithParameter::SetParameterInfo. SQL Server Native Client (começando no SQL Server 2008 (10.0.x)) implementa o requisito do OLE DB para bScale em ICommandWithParameter::SetParameterInfo a ser definido como precisão de segundos fracionários para DBTYPE_DBTIMESTAMP.
Agora, o procedimento armazenado sp_columns retorna "NO" em vez de "NO " para a coluna IS_NULLABLE. A partir do SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)), sp_columns procedimento armazenado agora retorna "NO" em vez de "NO" para uma coluna IS_NULLABLE.
SQLSetDescRec, SQLBindParameter e SQLBindCol agora executam a 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 marcar de consistência para nenhum tipo de descritor em SQLSetDescRec, SQLBindParameter ou SQLBindCol.
O SQLCopyDesc agora faz a verificação de consistência do descritor. Antes do SQL Server Native Client 10.0, SQLCopyDesc não fazia uma marcar de consistência quando o campo de SQL_DESC_DATA_PTR era definido em um registro específico.
SQLGetDescRec não faz mais uma consistência de descritor marcar. Antes do SQL Server Native Client 10.0, o SQLGetDescRec realizava um marcar de consistência do descritor quando o campo SQL_DESC_DATA_PTR era definido. Isso não era exigido pela especificação ODBC e, no SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) e versões posteriores, esse marcar de consistência não é mais executado.
Erro diferente retornado quando a data está fora do intervalo. Para o tipo datetime, um número de erro diferente será retornado por SQL Server Native Client (começando em SQL Server 2008 (10.0.x)) para uma data fora do intervalo do que foi retornado em versões anteriores.

Especificamente, SQL Server Native Client 9.0 retornou 22007 para todos os valores de ano fora do intervalo em conversões de cadeia de caracteres em datetime e SQL Server Native Client começando com a versão 10.0 (SQL Server 2008 (10.0.x)) retorna 22008 quando a data está dentro do intervalo compatível com datetime2 mas fora do intervalo com suporte por datetime ou smalldatetime.
O valor datetime trunca segundos fracionários e não será arredondado se o arredondamento alterar o dia. Antes do SQL Server Native Client 10.0, o comportamento do cliente para valores datetime enviados ao servidor era arredondá-los para o 1/300º de segundo mais próximo. A partir do SQL Server Native Client 10.0, esse cenário causará um truncamento de segundos fracionários se o arredondamento mudar o dia.
Possível truncamento de segundos para o valor datetime. Um aplicativo criado com SQL Server 2008 (10.0.x) Native Client (ou posterior) que se conecta a um servidor SQL Server 2005 truncará segundos e segundos fracionários para a parte de tempo dos dados enviados ao servidor se você associar a uma coluna datetime com um identificador de tipo de 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. A partir de SQL Server Native Client 10,0, o dia não será alterado (segundos fracionários são truncados e não arredondados).
Alterações de conversão de IBCPSession::BCColFmt. A partir do SQL Server Native Client 10.0, quando você usa IBCPSession::BCOColFmt para converter SQLDATETIME ou SQLDATETIME em um tipo de cadeia de caracteres, um valor fracionário é exportado. Por exemplo, ao converter o tipo SQLDATETIME para o tipo SQLNVARCHARMAX, versões anteriores do SQL Server Native Client retornadas

1989-02-01 00:00:00. SQL Server Native Client 10.0 e versões posteriores retornam 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.
A inserção de 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, a inserção de uma cadeia de caracteres vazia em uma associação sql_variant como um tipo de data/hora não gerava um erro. SQL Server Native Client 10.0 (e posterior) gera corretamente um erro nessa situação.
Validação mais rígida dos parâmetros SQL_C_TYPE _TIMESTAMP e DBTYPE_DBTIMESTAMP. Antes de SQL Server 2008 (10.0.x) Native Client, os valores de datetime eram arredondados para se ajustarem à escala das colunas datetime e smalldatetime por SQL Server. SQL Server 2008 (10.0.x) Native Client (e posterior) aplica as regras de validação mais rigorosas definidas na especificação principal ODBC 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 (10.0.x) podem fazer com que um aplicativo retorne resultados diferentes 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 resolve esse erro, defina NOCOUNT ON no gatilho ou chame SQLMoreResults para avançar para o próximo resultado.

Consulte Também

Programação do SQL Server Native Client