Как создать Составное Ограничение на уникальность данных в SQL Server 2005

Обновление: Эта недавняя статья MSDN, Инструменты И Методы для Идентификации Проблем Параллелизма , могла бы также представлять интерес

Stephen Toub в мониторе Мертвой блокировки статьи MSDN состояния следующие четыре условия, необходимые, чтобы мертвые блокировки произошли:

  • ограниченное количество А конкретного ресурса. В случае монитора в C# (что Вы используете при использовании ключевого слова блокировки), это ограниченное количество один, так как монитор является блокировкой взаимного исключения (значение, что только один поток может владеть монитором за один раз).

  • способность содержать один ресурс и запросить другого. В C# это сродни соединению одного объекта и затем соединению другого прежде, чем выпустить первую блокировку, например:


lock(a)
{
...
    lock(b)
    {
            ...
    }
}
  • Никакая возможность вытеснения. В C# это означает, что один поток не может вынудить другой поток выпустить блокировку.

  • А круговое условие ожидания. Это означает, что существует цикл потоков, каждый из которых ожидает рядом с выпуском ресурс, прежде чем он сможет продолжиться.

Он продолжает объяснять, что способ избежать мертвых блокировок состоит в том, чтобы избежать (или банка) условия четыре.

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

12
задан Joe Phillips 3 November 2009 в 23:00
поделиться

2 ответа

In SQL Server Management Studio

  • goto the Object Explorer
  • pick your table and open its designer (can't remember what it was called in 2005 - Modify Table or something?)
  • in the table designer, pick the "Manage Indexes and Keys" icons from the toolbar (the table with the little key)
  • in there, add a new index and give it a name, click it's "Unique" setting

alt text

  • open the list of columns in the index definition and add your columns you want to thave in the index

alt text

That's it! :)

15
ответ дан 2 December 2019 в 03:25
поделиться

Попробуйте следующее:

ALTER TABLE dbo.YourTableName 
ADD CONSTRAINT
ConstraintName UNIQUE NONCLUSTERED
(
    Column01,
    Column02,
    Column03
)

Я использую названия компаний для ограничений, поэтому, если они нарушаются и возникает исключение, я получаю « Нарушение только одного отдела на сотрудника » в моем сообщении об ошибке, а не « Нарушение ограничения XXX ».

29
ответ дан 2 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: