MSSQL 2016: ошибка при вычислении уникальной таблицы

Microsoft.SQLServer.2016.Unique_table_computation_failed_1_5_Rule (Rule)

Уникальные таблицы используются драйверами клиентов базы данных, например драйвером Microsoft Access для SQL Server, для создания запросов с возможностью обновления. Для заданной инструкции SELECT уникальная таблица идентифицирует таблицу, значения строк которой появляются в результирующем наборе не более одного раза. Если повторно выбрать строку из результирующего набора, то значений из ключевых столбцов уникальной таблицы достаточно для идентификации данной строки. Эта ошибка возникает, когда серверу не удается вычислить уникальную таблицу.

Knowledge Base article:

Сводка

Уникальные таблицы используются драйверами клиентов базы данных, например драйвером Microsoft Access для SQL Server, для создания запросов с возможностью обновления. Для заданной инструкции SELECT уникальная таблица идентифицирует таблицу, значения строк которой появляются в результирующем наборе не более одного раза. Если повторно выбрать строку из результирующего набора, то значений из ключевых столбцов уникальной таблицы достаточно для идентификации данной строки. Эта ошибка возникает, когда серверу не удается вычислить уникальную таблицу.

Причины

Эта ошибка может возникать в случае запроса SELECT с UNION, GROUP BY, ROLL UP или другими статистическими выражениями. Для таких случаев уникальные таблицы не определены.

Решения

Перепишите запрос, избегая конструкций, препятствующих вычислению уникальной таблицы. В большинстве скриптов ошибок обновляемый результирующий набор не может быть реализован.

Переопределяемые параметры

Название

Описание

Значение по умолчанию

Включено

Включает или отключает рабочий процесс.

Да

Приоритет

Определяет приоритет предупреждения.

1

Серьезность

Определяет серьезность предупреждения.

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: ошибка при вычислении уникальной таблицы
{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>