CORREÇÃO: Declaração UPDATE falha silenciosamente quando você faz referência a uma função de partição inexistente na cláusula WHERE no SQL Server de 2014 2016 ou 2017

Aplica-se a: Microsoft SQL Server 2014 Service Pack 2SQL Server 2014 DeveloperSQL Server 2014 Enterprise Mais

Sintomas


Suponha que você tem uma instrução de atualização que faz referência a uma função de partição não existente usando a palavra-chave $PARTITION no Microsoft SQL Server 2014 2016 ou 2017. Por exemplo,

ATUALIZAÇÃO TableName conjunto ColumnName= 'xyz' em $PARTITION. NonExistingPartitionFunction (ColumnName) = 1

Nesta situação, do SQL Server não executar uma atualização ou retornar uma mensagem de erro a indicar que o objeto NonExistingPartitionFunction não existe. No entanto, da perspectiva do usuário, parece que a instrução UPDATE é executada com êxito, mas, na verdade, ele falha.

Causa


Quando você executar um lote, o SQL Server podem executar a resolução de nome adiada (DNR). Nesse processo, do SQL Server não imediatamente produz um erro quando ele encontra um objeto não existente e que se espera que o objeto será criado pelo módulo ou lote antes da execução da instrução que faz referência a esse objeto. Para funções de partição do SQL Server não processa DNR corretamente.

Mais informações

Para obter mais informações sobre DNR, consulte Resolução de nome adiada.

Resolução


Esse problema foi corrigido nas seguintes atualizações cumulativas para o SQL Server:

Atualização de cumulativo 8 para SQL Server 2016 SP1

Atualização cumulativa 4 para o SQL Server 2017

Atualização cumulativa 9 para o SQL Server 2014 SP2

Status


A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Referências


Saiba mais sobre a terminologia usada pela Microsoft para descrever as atualizações de software.