Le calcul de la table unique a échoué

Microsoft.SQLServer.2008.Unique_table_computation_failed_1_5_Rule (Rule)

Knowledge Base article:

Résumé

Des tables uniques sont utilisées par les pilotes clients de la base de données, comme le pilote Microsoft Access pour SQL Server, pour construire des requêtes pouvant être mises à jour. Pour une instruction SELECT donnée, la table unique identifie la table dont les valeurs de lignes apparaissent au maximum une fois dans l'ensemble de résultats. En sélectionnant à nouveau une ligne dans un ensemble de résultats, les valeurs des colonnes clés de la table unique sont suffisantes pour identifier la ligne. Cette erreur est signalée quand le serveur ne peut pas calculer la table unique.

Causes

Cette erreur peut survenir lorsque la requête SELECT détient l'agrégat UNION, GROUP BY, ROLL UP ou d'autres. Les tables uniques ne sont pas définies dans ces cas précis.

Solutions

Rédigez à nouveau la requête en évitant les constructions qui gênent le calcul de la table unique. Dans la plupart des scénarios d'erreur, il n'est pas possible d'implémenter le jeu de résultats pouvant être mis à jour.

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail.

Oui

Priorité

Définit la priorité de l'alerte.

1

Gravité

Définit la gravité de l'alerte.

2

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
CategoryEventCollection
EnabledTrue
Event_ID16959
Event Source$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
RemotableTrue
Alert Message
Le calcul de la table unique a échoué
{0}
Event LogApplication
CommentMom2008ID='{E8827C4D-1683-4BC1-915A-32FB2D21441B}';MOM2008GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

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

Source Code:

<Rule ID="Microsoft.SQLServer.2008.Unique_table_computation_failed_1_5_Rule" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2008ID='{E8827C4D-1683-4BC1-915A-32FB2D21441B}';MOM2008GroupID={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" RunAs="SQL!Microsoft.SQLServer.SQLDefaultAccount">
<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="SQL!Microsoft.SQLServer.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.2008.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>