Atualizando um aplicativo no SQL Server 2005 Native Client
Este tópico discute as alterações interruptivas no SQL Server Native Client desde SQL Server Native Client em SQL Server 2005.
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 enviado com SQL Server 2005. SQL Server Native Client 10.0 fornecido com o SQL Server 2008. SQL Server Native Client 10.5 fornecido com o SQL Server 2008 R2. SQL Server Native Client 11.0 enviado com SQL Server 2012 e SQL Server 2014.
Comportamento alterado em SQL Server Native Client desde SQL Server 2005 | 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) contém zeros à direita em dados apenas até o comprimento máximo dos datetime valores. 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 em SQL Server 2008) implementa o requisito do OLE DB para bScale em ICommandWithParameter::SetParameterInfo a ser definido como a precisão de segundos fracionários para DBTYPE_DBTIMESTAMP. |
O sp_columns procedimento armazenado agora retorna "NÃO" em vez de "NÃO" para a coluna IS_NULLABLE. |
A partir do SQL Server Native Client 10.0 (SQL Server 2008), sp_columns o procedimento armazenado agora retorna "NÃO" em vez de "NÃO" 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 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, o SQLCopyDesc não fazia uma marcar de consistência quando o campo 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 executava um marcar de consistência de descritor quando o campo SQL_DESC_DATA_PTR era definido. Isso não era exigido pela especificação ODBC e, em SQL Server Native Client 10.0 (SQL Server 2008) e versões posteriores, essa consistência marcar não é mais executada. |
Erro diferente retornado quando a data está fora do intervalo. | Para o datetime tipo, um número de erro diferente será retornado por SQL Server Native Client (começando em SQL Server 2008) 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 para datetime e SQL Server Native Client começando com a versão 10.0 (SQL Server 2008) retorna 22008 quando a data está dentro do intervalo com suporte pordatetime2 , mas fora do intervalo com suporte por datetime ou smalldatetime . |
O valor datetime trunca segundos fracionários e não arredondará se o arredondamento alterar o dia. |
Antes de SQL Server Native Client 10.0, o comportamento do cliente para datetime os valores enviados ao servidor é arredondar para o 1/300º mais próximo de um segundo. A partir do SQL Server Native Client 10.0, esse cenário causa um truncamento de segundos fracionários se o arredondamento mudar o dia. |
Possível truncação de segundos para datetime valor. |
Um aplicativo criado com SQL Server 2008 Native Client (ou posterior) que se conecta a um servidor SQL Server 2005 truncará segundos e segundos fracionários por 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. |
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, a inserção de uma cadeia de caracteres vazia em um sql_variant limite como um tipo de data/hora não gerou 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 Native Client, datetime os valores eram arredondados para se ajustar à escala de datetime colunas e smalldatetime por SQL Server. SQL Server 2008 Native Client (e posterior) aplica as regras de validação mais rigorosas definidas na especificação principal ODBC por 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 tenha resultados diferentes retornados de uma instrução que fazia com que um gatilho fosse executado 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. |