Compartilhar via


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

Este tópico descreve as alterações no comportamento no Mecanismo de Banco de Dados. Essas alterações afetam a maneira como os recursos funcionam ou interagem no SQL Server 2012 em comparação com as versões anteriores do SQL Server.

Descoberta de metadados

Os aprimoramentos no Mecanismo de Banco de Dados, desde o SQL Server 2012, permitem que SQLDescribeCol obtenha descrições mais precisas dos resultados esperados do que os retornados por SQLDescribeCol nas versões anteriores do SQL Server. Para obter mais informações, consulte Descoberta de metadados.

A opção SET FMTONLY para determinar o formato de uma resposta sem realmente executar a consulta foi substituída por sp_describe_first_result_set (Transact-SQL), sp_describe_undeclared_parameters (Transact-SQL), sys.dm_exec_describe_first_result_set (Transact-SQL) e sys.dm_exec_describe_first_result_set_for_object (Transact-SQL).

Alterações de comportamento ao gerar scripts de uma tarefa do SQL Server Agent

No SQL Server 2012, se você criar um novo trabalho copiando o script de um trabalho existente, o novo trabalho poderá afetar inadvertidamente o trabalho existente. Para criar um novo trabalho usando o script de um trabalho existente, exclua manualmente o parâmetro @schedule\_uid que costuma ser o último parâmetro da seção que cria a agenda de trabalho no trabalho existente. Isso criará uma nova agenda independente para o novo trabalho sem afetar os trabalhos existentes.

Dobra constante para funções e métodos de CLR definidos pelo usuário

No SQL Server 2012, os objetos CLR definidos pelo usuário a seguir agora são dobráveis:

  • Funções definidas pelo usuário de CLR com valor escalar determinista.

  • Métodos deterministas de tipos de CLR definidos pelo usuário.

Esta melhoria busca aprimorar o desempenho quando estas funções ou métodos são chamados mais de uma vez com os mesmos argumentos. Porém, esta alteração pode causar resultados inesperados quando funções ou métodos não deterministas são marcados como deterministas em erro. O determinismo de uma função ou um método CLR é indicado pelo valor da propriedade IsDeterministic de SqlFunctionAttribute ou SqlMethodAttribute.

O comportamento do método STEnvelope() mudou com tipos espaciais vazios

Agora o comportamento do método STEnvelope com objetos vazios é consistente com o comportamento de outros métodos espaciais do SQL Server.

No SQL Server 2008, o método STEnvelope retornou os seguintes resultados quando chamado com objetos vazios:

select geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns POINT EMPTY
select geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns LINESTRING EMPTY
select geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns POLYGON EMPTY

No SQL Server 2012, o método STEnvelope agora retorna os seguintes resultados quando chamado com objetos vazios:

select geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
select geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
select geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY

Para determinar se um objeto espacial é vazio, chame o método STIsEmpty (tipo de dados geometry).

A função LOG tem novo parâmetro opcional

Agora a função LOG possui um parâmetro base opcional. Para obter mais informações, consulte LOG (Transact-SQL).

A computação de estatísticas durante operações de índice particionado mudou

No SQL Server 2012, as estatísticas não são criadas por meio do exame de todas as linhas da tabela quando um índice particionado é criado ou reconstruído. Em vez disso, o otimizador de consultas usa o algoritmo de amostragem padrão para gerar estatísticas. Depois de atualizar um banco de dados com índices particionados, você pode notar uma diferença nos dados de histograma destes índices. Esta alteração no comportamento pode não afetar o desempenho de consulta. Para obter estatísticas em índices particionados por meio do exame de todas as linhas da tabela, use CREATE STATISTICS ou UPDATE STATISTICS com a cláusula FULLSCAN.

A conversão de tipo de dados pelo método de valor XML mudou

O comportamento interno do método value do tipo de dados xml mudou. Este método executa um XQuery no XML e retorna um valor escalar do tipo de dados SQL Server especificado. O tipo xs tem de ser convertido no tipo de dados do SQL Server. Anteriormente, o método value convertia internamente o valor de origem em xs:string e depois convertia xs:string no tipo de dados do SQL Server. No SQL Server 2012, a conversão em xs:string é ignorada nos seguintes casos:

Tipo de dados de origem XS

Tipo de dados de destino do SQL Server

byte

short

int

integer

long

unsignedByte

unsignedShort

unsignedInt

unsignedLong

positiveInteger

nonPositiveInteger

negativeInteger

nonNegativeInteger

tinyint

smallint

int

bigint

decimal

numeric

decimal

decimal

numeric

float

real

double

float

O novo comportamento melhora o desempenho quando a conversão intermediária pode ser ignorada. Porém, quando as conversões de tipo de dados falharem, você verá mensagens de erro diferentes daquelas geradas na conversão do valor xs:string intermediário. Por exemplo, se o método de valor não convertesse o valor int 100000 em smallint, a mensagem de erro anterior seria:

The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.

No SQL Server 2012, sem a conversão intermediária em xs:string, a mensagem de erro é:

Arithmetic overflow error converting expression to data type smallint.

Alteração de comportamento de sqlcmd.exe no modo XML

Há alterações de comportamento se você usar sqlcmd.exe com modo de XML (comando :XML ON) ao executar SELECT * de T FOR XML …. Para obter mais informações, consulte Aprimoramentos na capacidade de gerenciamento (Mecanismo de Banco de Dados).

Mensagem DBCC CHECKIDENT revisada

No SQL Server 2012, a mensagem retornada pelo comando DBCC CHECKIDENT mudou somente quando usado com RESEED new_reseed_value para alterar o valor da identidade atual. A nova mensagem é "Verificando informações de identidade: valor de identidade atual '<valor de identidade atual>'. A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema".

Nas versões anteriores, a mensagem é "Verificando informações de identidade: valor de identidade atual '<valor de identidade atual>', valor atual da coluna '<valor atual da coluna>'. A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema". A mensagem não muda quando DBCC CHECKIDENT é especificado com NORESEED, sem um segundo parâmetro ou sem um valor reseed. Para obter mais informações, consulte DBCC CHECKIDENT (Transact-SQL).

O comportamento da função exist() no tipo de dados XML mudou

O comportamento da função exist() mudou em comparação de um tipo de dados XML com um valor nulo para 0 (zero). Considere o seguinte exemplo:

DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;

Nas versões anteriores, esta comparação retorna 1 (true); agora, esta comparação retorna 0 (zero, false).

As comparações a seguir não mudaram:

DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 1; -- 0 expected, 0 returned
SELECT COUNT(1) WHERE @test.exist('/dogs') IS NULL; -- 1 expected, 1 returned

Consulte também

Referência

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

Recursos do Mecanismo de Banco de Dados preteridos 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)