MSSQL 2016: Falha ao computar a tabela exclusiva

Microsoft.SQLServer.2016.Unique_table_computation_failed_1_5_Rule (Rule)

Tabelas exclusivas são usadas pelos drivers de cliente de banco de dados, como o driver do Microsoft Access para o SQL Server, a fim de criar consultas atualizáveis. Para uma determinada instrução SELECT, a tabela exclusiva identifica a tabela cujos valores de linha aparecem no máximo uma vez no conjunto de resultados. Quando você seleciona novamente uma linha em um conjunto de resultados, os valores das colunas de chave da tabela exclusiva são suficientes para identificar a linha. Esse erro é gerado quando o servidor não pode calcular a tabela exclusiva.

Knowledge Base article:

Resumo

Tabelas exclusivas são usadas pelos drivers de cliente de banco de dados, como o driver do Microsoft Access para o SQL Server, a fim de criar consultas atualizáveis. Para uma determinada instrução SELECT, a tabela exclusiva identifica a tabela cujos valores de linha aparecem no máximo uma vez no conjunto de resultados. Quando você seleciona novamente uma linha em um conjunto de resultados, os valores das colunas de chave da tabela exclusiva são suficientes para identificar a linha. Esse erro é gerado quando o servidor não pode calcular a tabela exclusiva.

Causas

Esse erro poderá ser gerado quando a consulta SELECT tiver UNION, GROUP BY, ROLL UP ou outros agregados. Tabelas exclusivas não são definidas nesses casos.

Resoluções

Regrave a consulta evitando as construções que impedem o cálculo da tabela exclusiva. Na maioria das situações de erro, o conjunto de resultados atualizável não é implementável.

Parâmetros Substituíveis

Nome

Descrição

Valor padrão

Habilitado

Habilita ou desabilita o fluxo de trabalho.

Sim

Prioridade

Define a Prioridade do Alerta.

1

Gravidade

Define a Severidade do Alerta.

2

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID16959
Event Source$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL 2016: Falha ao computar a tabela exclusiva
{0}
Event LogApplication
CommentMom2016ID='{E8827C4D-1683-4BC1-915A-32FB2D21441B}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.Windows.EventProvider Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.2016.Unique_table_computation_failed_1_5_Rule" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2016ID='{E8827C4D-1683-4BC1-915A-32FB2D21441B}';MOM2016GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery>EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value>16959</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="SystemHealth!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.2016.Unique_table_computation_failed_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>Event ID: $Data/EventDisplayNumber$. $Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>