T-SQL中的唯一XML元素约束

时间:2010-02-22 21:43:43

标签: xml tsql constraints unique

我有一个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 个答案:

答案 0 :(得分:2)

是的,你可以

  • 编写一个从XML
  • 中提取“id”的存储函数
  • 在您的桌面上创建一个计算的持久列,使用该存储的函数
  • 获取“id”
  • 在新的计算+持久列
  • 上创建唯一索引

这肯定会奏效。

答案 1 :(得分:1)

如果它不是一个单独的领域,那么我认为你不能。

但是,您可以在insert上添加一个触发器,它将从XML数据中提取GUID并将其放在单独的字段中。然后你可以对该字段有一个独特的约束。

另一种方法是创建一个夜间作业,该作业将扫描数据库以搜索重复项。