Partilhar via


Alterações em recursos do Mecanismo de Banco de Dados que causam interrupção no SQL Server 2012

Este tópico descreve as últimas alterações no SQL Server 2012 Mecanismo de Banco de Dados e versões anteriores do SQL Server. Essas alterações podem danificar aplicativos, scripts ou funcionalidades baseados em versões anteriores do SQL Server. Talvez você encontre esses problemas ao atualizar. Para obter mais informações, consulte Usar o Supervisor de Atualização para preparar para atualizações.

Neste tópico

Alterações recentes no SQL Server 2012

Últimas alterações no SQL Server 2008/SQL Server 2008R2

Alterações recentes no SQL Server 2005

Últimas alterações do SQL Server 2012

Transact-SQL

Recurso

Descrição

Seleção de colunas ou tabelas denominadas NEXT.

As sequências usam a função NEXT VALUE FOR do padrão ANSI. Se uma tabela ou coluna for denominada NEXT, e essa tabela ou coluna tiver um alias VALUE e se o padrão ANSI AS for omitido, a instrução resultante poderá causar um erro. Para obter uma solução alternativa, inclua a palavra-chave AS do padrão ANSI. Por exemplo, SELECT NEXT VALUE FROM Table deveria ser reescrito como SELECT NEXT AS VALUE FROM Table e SELECT Col1 FROM NEXT VALUE deveria ser reescrito como SELECT Col1 FROM NEXT AS VALUE.

operador PIVOT

O operador PIVOT não é permitido em uma consulta CTE (expressão de tabela comum) recursiva quando o nível de compatibilidade do banco de dados é definido como 110. Escreva a consulta novamente ou altere o nível de compatibilidade para 100 ou menos. O uso de PIVOT e uma consulta CTE recursiva produz resultados incorretos quando há mais de uma única linha por agrupamento.

sp_setapprole e sp_unsetapprole

O parâmetro de cookie OUTPUT para sp_setapprole está documentado atualmente como varbinary(8000), que é o comprimento máximo correto. No entanto, a implementação atual retorna varbinary(50). Os aplicativos devem continuar a reservar varbinary(8000) para que o aplicativo continue a operar corretamente se o tamanho de retorno do cookie aumentar em uma versão futura. Para obter mais informações, consulte sp_setapprole (Transact-SQL).

EXECUTE AS

O parâmetro OUTPUT de cookie para EXECUTE AS está documentado atualmente como varbinary(8000), que tem o comprimento máximo correto. No entanto, a implementação atual retorna varbinary(100). Os aplicativos devem continuar a reservar varbinary(8000) para que o aplicativo continue a operar corretamente se o tamanho de retorno do cookie aumentar em uma versão futura. Para obter mais informações, consulte EXECUTE AS (Transact-SQL).

função sys.fn_get_audit_file

Duas outras colunas (user_defined_event_id e user_defined_information) foram adicionadas para oferecer suporte a eventos de auditoria definidos pelo usuário. Aplicativos que não selecionam colunas por nome podem retornar mais colunas do que o esperado. Selecione as colunas por nome ou ajuste o aplicativo para aceitar essas colunas adicionais.

Operações CAST e CONVERT em colunas computadas do tipo time ou datetime2

Nas versões anteriores do SQL Server, o estilo padrão de operações CAST e CONVERT nos tipos de dados time e datetime2 é 121, exceto quando um dos tipos é usado em uma expressão de coluna computada. Para colunas computadas, o estilo padrão é 0. Esse comportamento afeta as colunas computadas quando são criadas, usadas em consultas que envolvam parametrização automática ou usadas em definições de restrição.

No nível de compatibilidade 110, o estilo padrão das operações CAST e CONVERT nos tipos de dados time e datetime2 sempre é 121. Se a sua consulta depender do comportamento antigo, use um nível de compatibilidade inferior a 110 ou especifique explicitamente o estilo 0 na consulta afetada.

A atualização do banco de dados para o nível de compatibilidade 110 não alterará os dados de usuário que foram armazenados em disco. Você deve corrigir esses dados manualmente conforme apropriado. Por exemplo, se você usou SELECT INTO para criar uma tabela com base em uma fonte que continha uma expressão de coluna computada descrita acima, os dados (usando o estilo 0) serão armazenados, em vez da própria definição de coluna computada. Você precisará atualizar manualmente esses dados para que coincidam com o estilo 121.

ALTER TABLE

A instrução ALTER TABLE permite apenas nomes de tabela de duas partes (schema.object). A especificação de um nome de tabela usando os formatos a seguir agora falhará em tempo de compilação com o erro 117.

  • server.database.schema.table

  • .database.schema.table

  • ..schema.table

As versões anteriores que especificam que o formato server.database.schema.table retornaram o erro 4902. A especificação do formato .database.schema.table ou do formato ..schema.table foi bem-sucedida.

Para resolver o problema, remova o uso de um prefixo de 4 partes.

Navegando em metadados

Consultar uma exibição usando FOR BROWSE ou SET NO_BROWSETABLE ON agora retorna os metadados da exibição, não os metadados do objeto subjacente. Esse comportamento agora corresponde a outros métodos de navegação em metadados.

SOUNDEX

No nível de compatibilidade de banco de dados 110, a função SOUNDEX implementa novas regras que podem fazer com que os valores computados pela função sejam diferentes dos valores computados sob os níveis de compatibilidade anteriores. Após a atualização para o nível de compatibilidade 110, talvez seja necessário recriar os índices, os heaps ou as restrições CHECK que usam a função SOUNDEX. Para obter mais informações, consulte SOUNDEX (Transact-SQL).

Mensagem de contagem de linhas para instruções DML com falha

No SQL Server 2012, o Mecanismo de Banco de Dados enviará de forma consistente o token TDS DONE com RowCount: 0 a clientes quando uma instrução DML falhar. Nas versões anteriores do SQL Server, um valor incorreto de -1 é enviado ao cliente quando a instrução DML que falha está contida em um bloco TRY-CATCH é parametrizada automaticamente pelo Mecanismo de Banco de Dados ou o bloco TRY-CATCH não está no mesmo nível da instrução que falhou. Por exemplo, se um bloco TRY-CATCH chamar um procedimento armazenado e uma instrução DML no procedimento falhar, o cliente receberá incorretamente um valor -1.

Os aplicativos que confiarem nesse comportamento incorreto falharão.

SERVERPROPERTY (‘Edition’)

Edição instalada do produto da instância do SQL Server 2012. Use o valor dessa propriedade para determinar os recursos e os limites, como o número máximo de CPUs que têm suporte do produto instalado.

Com base na Enterprise Edition instalada, ele pode retornar ‘Enterprise Edition’ ou ‘Enterprise Edition: licenciamento baseado em núcleo’. As edições Enterprise são diferenciadas com base na capacidade de computação máxima por uma única instância do SQL Server. Para obter mais informações sobre limites de capacidade de computação no SQL Server 2012, consulte Computar limites de capacidade por edição do SQL Server.

CREATE LOGIN

A opção CREATE LOGIN WITH PASSWORD = 'password' HASHED não pode ser usada com os hashes criados por SQL Server 7 ou anterior.

Operações CAST e CONVERT para datetimeoffset

Os únicos estilos que têm suporte ao serem convertidos de tipos de data e hora para datetimeoffset são 0 ou 1. Todos os outros estilos de conversão retornam erro 9809. Por exemplo, o seguinte código retorna um erro 9809.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

SET ROWCOUNT

O comportamento do SET ROWCOUNT foi alterado para melhorar a eficiência de várias consultas comuns, podendo afetar os planos de consulta para os níveis de compatibilidade 110 e superior. Um erro que pode ocorrer quando a instrução SET ROWCOUNT altera o valor ROWCOUNT para 0 ou de 0 depois de uma instrução DECLARE CURSOR e antes de uma FETCH. Para evitar este erro, defina o nível de compatibilidade do banco de dados para 100 ou defina o ROWCOUNT fora das instruções do cursor.

Exibições de gerenciamento dinâmico

Exibição

Descrição

sys.dm_exec_requests

As alterações de coluna de comando de nvarchar(16) para nvarchar(32).

sys.dm_os_memory_cache_counters

As colunas a seguir foram renomeadas.

Nome da coluna anterior

Nome da nova coluna

single_pages_kb

pages_kb

multi_pages_kb

pages_in_use_kb

sys.dm_os_memory_cache_entries

A coluna pages_allocated_count foi renomeada como pages_kb.

sys.dm_os_memory_clerks

A coluna multi_pages_kb foi removida.

A coluna single_pages_kb foi renomeada como pages_kb.

sys.dm_os_memory_nodes

As colunas a seguir foram renomeadas.

Nome da coluna anterior

Nome da nova coluna

single_pages_kb

pages_kb

multi_pages_kb

foreign_committed_kb

sys.dm_os_memory_objects

As colunas a seguir foram renomeadas.

Nome da coluna anterior

Nome da nova coluna

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

As colunas a seguir foram renomeadas.

Nome da coluna anterior

Nome da nova coluna

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

A coluna de localidade foi removida.

Exibição

Descrição

sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions

Uma nova coluna, is_system, foi adicionada a sys.data_spaces e sys.partition_functions. (sys.partition_schemes e sys.filegroups herdam as colunas de sys.data_spaces.)

Um valor de 1 nessa coluna indica que o objeto foi usado para fragmentos de índice de texto completo.

Em sys.partition_functions, sys.partition_schemes e sys.filegroups, a nova coluna não é a última coluna. Revise as consultas existentes que confiam na ordem das colunas retornadas dessas exibições de catálogo.

Tipos de dados de SQL CLR (geometria, geografia e hierarchyid)

O assembly Microsoft.SqlServer.Types.dll, que contém os tipos de dados espaciais e do tipo hierarchyid, foi atualizado da versão 10.0 para a versão 11.0. Aplicativos personalizados que referenciam esse assembly poderão falhar quando as condições a seguir forem verdadeiras.

  • Quando você mover um aplicativo personalizado de um computador no qual o SQL Server 2008 R2 foi instalado para um computador em que somente o SQL Server 2012 está instalado, o aplicativo falhará porque a versão referenciada 10.0 do assembly SqlTypes não está presente. Talvez você receba esta mensagem de erro: “Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.”

  • Quando você fizer referência ao assembly SqlTypes versão 11.0, e a versão 10.0 também estiver instalada, talvez você receba esta mensagem de erro: “System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'.”

  • Quando você referenciar o assembly SqlTypes versão 11.0 de um aplicativo personalizado com os destinos .NET 3.5, 4 ou 4.5, o aplicativo falhará porque o SqlClient carrega a versão 10.0 do assembly por design. Essa falha ocorre quando o aplicativo chama um dos seguintes métodos:

    • O método GetValue da classe SqlDataReader

    • O método GetValues da classe SqlDataReader

    • operador de índice de colchete [] da classe SqlDataReader

    • O método ExecuteScalar da classe SqlCommand

Você pode contornar esse problema usando um dos seguintes métodos:

  • Você pode contornar esse problema no seu código chamando o método GetSqlBytes, em vez dos métodos Get listados acima, para recuperar tipos de sistema CLR do SQL Server, conforme mostrado no exemplo a seguir:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";
          using (SqlConnection conn = new SqlConnection("..."))
          {
                SqlCommand cmd = new SqlCommand(query, conn);
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
    
                while (reader.Read())
                {
                      // In version 11.0 only
                      SqlGeometry g = 
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));
    
                      // In version 10.0 or 11.0
                      SqlGeometry g2 = new SqlGeometry();
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));
                }
          }
    
  • Você pode contornar esse problema usando redirecionamento de assembly no arquivo de configuração de aplicativo, conforme mostrado no seguinte exemplo:

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        ...
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
        </dependentAssembly>
        ...
    </assemblyBinding>
    <runtime>
    
  • Você pode contornar esse problema na sua cadeia de conexão especificando um valor "SQL Server 2012" para o atributo "Type System Version" para forçar o SqlClient a carregar a versão 11.0 do assembly. Esse atributo de cadeia de conexão está disponível apenas no .NET 4.5 e versões superiores.

  • A marca assemblyBinding deve ser encapsulada na marca runtime.

Suporte para AWE

O suporte ao recurso AWE (Address Windowing Extensions) de 32 bits foi descontinuado. Isso poderá resultar em desempenho mais lento em sistemas operacionais de 32 bits. Para instalações que usam quantidades de memória grandes, migre para um sistema operacional de 64 bits.

As funções XQuery reconhecem substituições

A recomendação W3C para funções e operadores XQuery requer que eles considerem um par substituto que representa um caractere Unicode no intervalo alto como um glifo único na codificação UTF-16. No entanto, nas versões do SQL Server anteriores ao SQL Server 2012, as funções de cadeia de caracteres não reconheciam pares substitutos como um caracteres único. Algumas operações de cadeia de caracteres – como cálculos de comprimento da cadeia de caracteres e extrações de subcadeia de caracteres – retornavam resultados incorretos. Agora o SQL Server 2012 oferece total suporte ao UTF-16 e à manipulação correta de pares substitutos.

O tipo de dados XML no SQL Server permite apenas pares substitutos bem formados. No entanto, algumas funções ainda podem retornar resultados indefinidos ou inesperados em certas circunstâncias, pois é possível passar pares substitutos inválidos ou parciais para funções XQuery como valores de cadeia de caracteres. Considere os seguintes métodos para gerar valores da cadeia de caracteres ao usar XQuery no SQL Server:

  • Forneça um valor da cadeia de caracteres constante como um valor binário. Durante o uso desse método, continua sendo possível passar pares substitutos inválidos ou parciais.

  • Forneça um valor da cadeia de caracteres constante fornecendo entidades de caractere. Durante o uso desse método, não é possível passar pares substitutos inválidos ou parciais. As funções XQuery requerem uma entidade de caractere único para o caracteres de alto nível. Essas funções gerarão um erro se as entidades de caracteres para os caracteres de pares substitutos forem fornecidas.

  • Para importar valores externos, use sql:column ou sql:variable. Durante o uso desses métodos, continua sendo possível introduzir pares substitutos inválidos ou parciais.

Funções e operadores XQuery afetados

Agora, as seguintes funções e operadores XQuery manipulam pares substitutos UTF-16 corretamente no SQL Server 2012:

  • fn:string-length. No entanto, se um par substituto inválido ou parcial for passado como um argumento, o comportamento de string-length será indefinido.

  • fn:substring.

  • fn:contains. No entanto, se um par substituto parcial for passado como um valor, contains poderá retornar resultados inesperados, pois pode encontrar o par substituto parcial contido no par substituto bem formado.

  • fn:concat. No entanto, se um par substituto parcial for passado como um valor, concat poderá produzir pares substitutos incorretos ou parciais.

  • Operadores de comparação e a cláusula order by. Os operadores de comparação incluem +, <, >, <=, >=, eq, lt, gt, le e ge.

Chamadas de consulta distribuída a um procedimento de sistema

Chamadas de consulta distribuída por OPENQUERY para alguns procedimentos de sistema que falharão quando chamadas de um servidor para outro. Isto ocorre quando o Mecanismo de Banco de Dados não pode descobrir metadados para um procedimento. Por exemplo, SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Compatibilidade com versões anteriores

O novo comportamento depende do nível de compatibilidade

As seguintes funções e operadores demonstram o novo comportamento descrito acima somente quando o nível de compatibilidade é 110 ou superior:

  • fn:contains.

  • fn:concat.

  • operadores de comparação e cláusula order by

O novo comportamento depende do URI de namespace padrão para funções

As funções a seguir demonstram o novo comportamento descrito acima somente quando o URI de namespace padrão corresponde ao namespace na recomendação final, ou seja, http://www.w3.org/2005/xpath-functions. Quando o nível de compatibilidade é 110 ou superior, por padrão, o SQL Server 2012 associa o namespace da função padrão a esse namespace. No entanto, essas funções demonstram o novo comportamento quando esse namespace é usado, independentemente do nível de compatibilidade.

  • fn:string-length

  • fn:substring

Ícone de seta usado com o link Voltar ao InícioVoltar ao início

Últimas alterações no SQL Server 2008/SQL Server 2008R2

Esta seção contém as últimas alterações introduzidas no SQL Server 2008. Nenhuma alteração foi introduzida no SQL Server 2008 R2.

Agrupamentos

Recurso

Descrição

Novos agrupamentos

O SQL Server 2008 introduz novos agrupamentos totalmente alinhados aos agrupamentos fornecidos pelo Windows Server 2008. Esses 80 novos agrupamentos melhoraram a exatidão linguística e foram indicados por referências à versão *_100. Se você escolher um agrupamento novo para o servidor ou para o banco de dados, lembre-se de que o agrupamento pode não ser reconhecido pelos clientes com drivers de clientes mais antigos. Agrupamentos não reconhecidos podem fazer com que o aplicativo retorne erros e apresente falhas. Considere as seguintes soluções:

  • Atualize o sistema operacional do cliente para que os agrupamentos de sistemas subjacentes sejam atualizados.

  • Se houver um software cliente do banco de dados instalado no cliente, considere a possibilidade de aplicar uma atualização de serviço ao software cliente do banco de dados.

  • Escolha um agrupamento existente, mapeado para uma página de código no cliente.

CLR (Common Language Runtime)

Recurso

Descrição

Assemblies CLR

Quando um banco de dados é atualizado para SQL Server 2008, o assembly do Microsoft.SqlServer.Types para dar suporte a novos tipos de dados é instalado automaticamente. As regras do Supervisor de Atualização detectam qualquer tipo de usuário ou assemblies de usuário com nomes conflitantes. O Supervisor de Atualização aconselhará renomear qualquer assembly em conflito, bem como qualquer tipo em conflito, ou usar nomes de duas partes no código para fazer referência a esse tipo de usuário preexistente.

Se uma atualização de banco de dados detectar um assembly de usuário com um nome conflitante, ele o renomeará automaticamente e o colocará no banco de dados em modo de suspeição.

Se um tipo de usuário com nome conflitante existir durante a atualização, nenhuma etapa especial será efetuada. Depois da atualização, existirão ambos os tipos de usuário, antigo e novo. O tipo de usuário estará disponível somente por meio de nomes de duas partes.

Assemblies CLR

O SQL Server 2008 instala o .NET Framework 3.5 SP1, que atualiza bibliotecas no GAC (cache de assembly global). Se você tiver bibliotecas sem-suporte registradas em um banco de dados do SQL Server, o aplicativo do SQL Server poderá parar de funcionar após a atualização para o SQL Server 2008. Isso ocorre porque o serviço de reparo ou a atualização de bibliotecas no GAC não atualiza os assemblies dentro do SQL Server. Se um assembly existir tanto em um banco de dados do SQL Server como no GAC, as duas cópias do assembly deverão ser exatamente iguais. Caso isso não aconteça, ocorrerá um erro quando o assembly for usado pela integração CLR do SQL Server. Para obter mais informações, consulte Bibliotecas do .NET Framework compatíveis.

Depois de atualizar o banco de dados, mantenha ou atualize a cópia do assembly dentro dos bancos de dados do SQL Server com a instrução ALTER ASSEMBLY. Para obter mais informações, consulte o Artigo 949080 da Base de Dados de Conhecimento.

Para detectar se você está usando uma biblioteca do .NET Framework sem-suporte no aplicativo, execute a seguinte consulta no banco de dados.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Rotinas CLR

O uso da representação dentro de funções CLR definidas pelo usuário, de agregações definidas pelo usuário ou de UDTs (tipos definidos pelo usuário) pode causar o erro 6522 no aplicativo após a atualização para o SQL Server 2008.

Os cenários a seguir são executados com êxito no SQL Server 2005, mas falham no SQL Server 2008. São apresentadas resoluções para cada cenário.

  1. Uma função CLR definida pelo usuário, uma agregação definida pelo usuário ou um método UDT que utiliza representação tem um parâmetro de tipo nvarchar(max), varchar(max), varbinary(max), ntext, text, image ou um UDT grande e não tem o atributo DataAccessKind.Read no método.

    Para resolver este problema, adicione o atributo DataAccessKind.Read ao método, recompile o assembly e reimplante a rotina e o assembly.

  2. Uma função CLR com valor de tabela que tem um método Init que executa representação.

    Para resolver este problema, adicione o atributo DataAccessKind.Read no método, recompile o assembly e reimplante a rotina e o assembly.

  3. Uma função CLR com valor de tabela que tem um método FillRow que executa representação.

    Para resolver este problema, remova a representação do método FillRow. Não acesse recursos externos usando o método FillRow. Em vez disso, acesse recursos externos do método Init.

Exibições de gerenciamento dinâmico

Exibição

Descrição

sys.dm_os_sys_info

Removidas as colunas cpu_ticks_in_ms e sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

A coluna resource_semaphore_id não é uma ID exclusiva no SQL Server 2008. Essa alteração pode afetar a execução de consulta de solução de problemas. Para obter mais informações, consulte sys.dm_exec_query_resource_semaphores (Transact-SQL).

Erros e eventos

Recurso

Descrição

Erros de logon

No SQL Server 2005, o erro 18452 é retornado quando um logon do SQL é usado para conexão a um servidor configurado para usar somente a Autenticação do Windows. No SQL Server 2008, o erro 18456 é retornado.

Plano de Execução

Recurso

Descrição

Esquema Showplan XML

Um novo elemento SeekPredicateNew é adicionado ao esquema Showplan XML, e a sequência de xsd de inclusão (SqlPredicatesType) é convertida em um item <xsd:choice>. Em vez de um ou mais elementos SeekPredicate, um ou mais elementos SeekPredicateNew podem aparecer agora no Showplan XML. Os dois elementos são mutuamente exclusivos. SeekPredicate é mantido no esquema Showplan XML para compatibilidade com versões anteriores. No entanto, os planos de consulta criados no SQL Server 2008 podem conter o elemento SeekPredicateNew. Os aplicativos que esperam recuperar somente o filho de SeekPredicate do nó ShowPlanXML/BatchSequence/Lote/Instruções/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates poderá falhar, se o elemento SeekPredicate não existir. Reescreva o aplicativo para esperar o elemento SeekPredicate ou SeekPredicateNew neste nó. Para obter mais informações, consulte .

Esquema Showplan XML

Um novo atributo IndexKind é adicionado ao tipo complexo de ObjectType no esquema do Showplan XML. Haverá falha nos aplicativos que validam estritamente os planos do SQL Server em relação ao esquema do SQL Server 2005.

Transact-SQL

Recurso

Descrição

Evento DDL ALTER_AUTHORIZATION_DATABASE

No SQL Server 2005, quando o evento DDL ALTER_AUTHORIZATION_DATABASE é acionado, o valor 'object' é retornado no elemento ObjectType do xml EVENTDATA para esse evento quando o tipo de entidade do protegível na operação de linguagem de definição de dados (DDL) é um objeto. No SQL Server 2008, o tipo real (por exemplo, 'table' ou 'function') é retornado.

CONVERT

Se um estilo inválido for passado para a função CONVERT, será retornado um erro quando o tipo de conversão for de binário em caractere ou de caractere em binário. Em versões anteriores do SQL Server, o estilo inválido era definido como o estilo padrão para conversões de binário em caractere e de caractere em binário.

GRANT/DENY/REVOKE EXECUTE em assemblies

A permissão EXECUTE não pode ser concedida, negada ou revogada para assemblies. Essa permissão não tem nenhum efeito e agora provoca um erro. Em vez disso, conceda, negue ou revogue a permissão EXECUTE nos procedimentos armazenados ou nas funções que fazem referência ao método de assembly.

Permissões GRANT/DENY/REVOKE em tipos de sistema

As permissões não podem ser concedidas, negadas ou revogadas para tipos de sistema. Em versões anteriores do SQL Server, essas instruções tinham êxito, mas não tinham nenhum efeito. No SQL Server 2008, um erro é retornado.

GROUP BY

A cláusula GROUP BY não pode conter uma subconsulta em uma expressão que é usada pela lista group by. Em versões anteriores do SQL Server, isso era permitido. No SQL Server 2008, o erro 144 é retornado.

Por exemplo, o código a seguir terá êxito no SQL Server 2005 e falhará no SQL Server 2008.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*) 
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0 
END;

Cláusula OUTPUT

Para evitar comportamento não determinístico, a cláusula OUTPUT não pode fazer referência a uma coluna de uma exibição ou função com valor de tabela embutida quando essa coluna é definida por um dos seguintes métodos:

  • Uma subconsulta.

  • Uma função definida pelo usuário que executa acesso a dados de usuário ou de sistema ou que supostamente executa tal acesso.

  • Uma coluna computada que contém em sua definição uma função definida pelo usuário que executa acesso a dados de usuário ou de sistema.

Quando SQL Server detectar tal coluna na cláusula OUTPUT, ocorrerá o erro 4186. Para obter mais informações, consulte MSSQLSERVER_4186.

Cláusula OUTPUT INTO

A tabela de destino da cláusula OUTPUT INTO não pode ter gatilhos habilitados.

Opção precompute rank em nível de servidor

Esta opção não tem suporte no SQL Server 2008. Modifique os aplicativos que usam esse recurso o mais rápido possível.

dica de tabela READPAST

Você não pode especificar a dica READPAST em Isolamento de Instantâneo.

A dica READPAST é ignorada quando a opção de banco de dados READ_COMMITED_SNAPSHOT ou ALLOW_SNAPSHOT_ISOLATION é configurada como ON. No entanto, se você combinar a dica READPAST com READCOMMITTEDLOCK, o comportamento de READPAST é igual ao do bloqueio da dica READCOMMITTED.

sp_helpuser

Os nomes de colunas a seguir que são retornados no conjunto de resultados do procedimento armazenado sp_helpuser foram alterados.

Nome da coluna anterior

Nome da nova coluna

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

Criptografia transparente de dados

A TDE (criptografia de dados transparente) é realizada no nível de E/S: a estrutura da página é descriptograda na memória e só é criptograda quando a página é gravada no disco. Os arquivos de banco de dados e os arquivos de log são criptografados. Os aplicativos de terceiros que ignoram o mecanismo regular do SQL Server para acessar páginas (por exemplo, verificando os dados ou os arquivos de log diretamente), falharão quando um banco de dados usar TDE porque os dados estão criptografados nos arquivos. Esses aplicativos podem aproveitar a API Criptográfica do Windows para desenvolver uma solução para descriptografar os dados fora do SQL Server.

XQuery

Recurso

Descrição

Suporte à data/hora

No SQL Server 2005, os tipos de dados xs:time, xs:date e xs:dateTime não têm suporte para fuso horário. Os dados de fuso horário são mapeados para o fuso horário de UTC. O SQL Server 2008 fornece comportamento de conformidade padrão, o que resulta nas seguintes alterações:

  • Os valores sem fuso horário são validados.

  • O fuso horário fornecido ou a ausência de um fuso horário é preservada.

  • A representação de armazenamento interna é modificada.

  • A resolução de valores armazenados é aumentada.

  • Anos negativos não são permitidos.

Modifique os aplicativos e as expressões XQuery para considerar os novos valores de tipo.

Expressões XQuery e Xpath

No SQL Server 2005, as etapas em uma expressão XQuery ou XPath que começam com dois-pontos (':') são permitidas. Por exemplo, a instrução a seguir contém um teste de nome (CTR02) dentro da expressão de caminho que começa com um dois pontos.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

No SQL Server 2008 esse uso não é permitido porque não está de acordo com os padrões XML. Retorna o erro 9341. Remova o dois-pontos à esquerda ou especifique um prefixo para o teste de nome, por exemplo, (n$/CTR02) ou (n$/p1:CTR02).

Connecting

Recurso

Descrição

Estabelecendo conexão a partir do SQL Server Native Client usando SSL

Na conexão com o SQL Server Native Client, os aplicativos que usam "SERVER=shortname; FORCE ENCRYPTION=true" com certificado cujos Assuntos especificam FQDNs (nomes de domínios totalmente qualificados) antes se conectavam devido à validação reduzida. O SQL Server 2008 R2 aprimora a segurança impondo assuntos de FQDN para certificados. Os aplicativos que dependem de validação reduzida devem executar uma das seguintes ações:

  • Use o FQDN na cadeia de caracteres de conexão.

    • Esta opção não exigirá recompilação do aplicativo se a palavra-chave SERVER da cadeia de conexão for configurada fora do aplicativo.

    • Esta opção não funciona para aplicativos que têm as cadeias de conexão embutidas no código.

    • Esta opção não funciona para aplicativos que usam Espelhamento de Banco de Dados porque o servidor espelhado responde com um nome simples.

  • Adicione um alias para o nome curto mapear para o FQDN.

    • Esta opção funciona mesmo para aplicativos que têm as cadeias de conexão embutidas no código.

    • Esta opção não funciona para aplicativos que usam Espelhamento de Banco de Dados já que os provedores não procuram aliases para nomes de parceiro de failover recebidos.

  • Tenha um certificado emitido para nome curto.

    • Esta opção funciona para todos os aplicativos.

Ícone de seta usado com o link Voltar ao InícioVoltar ao início

Alterações recentes no SQL Server 2005

Para obter uma lista das últimas alterações introduzidas no SQL Server 2005, consulte Alterações recentes em recursos do mecanismo de banco de dados no SQL Server 2005.

Consulte também

Referência

Recursos do Mecanismo de Banco de Dados preteridos no SQL Server 2012

Alterações no comportamento de recursos do Mecanismo de Banco de Dados no SQL Server 2012

Funcionalidade do Mecanismo de Banco de Dados descontinuada no SQL Server 2012

Nível de compatibilidade de ALTER DATABASE (Transact-SQL)

Outros recursos

Compatibilidade com versões anteriores do Mecanismo de Banco de Dados do SQL Server