Уникальное ограничение XML-элемента в T-SQL - PullRequest
1 голос
/ 23 февраля 2010

У меня есть таблица SQL (Microsoft SQL 2008) с данными XML в одном из столбцов. Каждый корневой узел XML имеет атрибут GUID.

Например:

<!--Row 1-->
<example:root id="E0B1BCEA-C0E2-4d7c-BF67-FA9A7C3FBA73">
    [...]
</example:root>

<!--Row 2-->
<example:root id="13BB87F4-32A5-4de7-8CE9-E62AF002B958">
    [...]
</example:root>

Как можно создать ограничение, которое будет гарантировать, что этот GUID уникален, то есть нет двух строк с одинаковым значением root / @ id?

Примечание: я не могу ни сделать это на уровне приложения, ни создать хранимую процедуру для вставки (потому что это требует изменения существующего приложения).

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

Да, вы могли бы

  • написать хранимую функцию, которая извлекает «id» из XML
  • создать вычисляемый постоянный столбец в вашей таблице, который получает этот «идентификатор», используя эту сохраненную функцию
  • создать уникальный индекс для вашего нового вычисляемого + сохраненного столбца

Это определенно сработает.

1 голос
/ 23 февраля 2010

Если это не отдельное поле, то я не думаю, что вы можете.

Но вы можете добавить триггер при вставке, который извлечет GUID из данных XML и поместит его в отдельное поле. И тогда вы можете иметь уникальное ограничение на это поле.

Другой подход заключается в создании ночной работы, которая будет сканировать базу данных в поисках дубликатов.

...