2010-02-22 44 views
1

我在其中一列中有一个包含XML数据的SQL(Microsoft SQL 2008)表。每个XML根节点都有一个属性,它是一个GUID。T-SQL中的唯一XML元素约束

例如:

<!--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是独一无二的,即没有两行共享价值同根/ @ ID?

注:我不能没有做到这一点,在应用层面上,也不需要插入创建存储过程(因为它需要改变现有的应用程序)。

回答

1

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

但是,你可以插入这会从XML数据中提取GUID,并把它放在一个单独的字段添加一个触发器。然后你可以在这个领域有一个唯一的约束。

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

2

是的,你可以

  • 写一个存储功能从XML
  • 提取“ID”创建一个计算,坚持其抓住你的表列“ID”使用存储功能
  • 创建新的唯一索引,计算+坚持列

这肯定会工作。

+0

+1,正是我的想法! – 2010-02-22 22:12:04