2010-02-22 74 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