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

发布于 2024-08-22 11:52:12 字数 455 浏览 5 评论 0原文

我有一个 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 值?

注意:我既不能在应用程序级别执行此操作,也不能为插入创建存储过程(因为它需要更改现有应用程序)。

I have an SQL (Microsoft SQL 2008) table with XML data in one of the columns. Each XML root node has an attribute which is a GUID.

For example:

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

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

How is it possible to create a constraint which will ensure that this GUID is unique, i.e. there is no two rows sharing the same root/@id value?

Note: I can't neither do it at application level, nor creating a stored procedure for the insert (because it requires to change an existing application).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

棒棒糖 2024-08-29 11:52:12

是的,您可以

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

这将绝对有效。

Yes, you could

  • write a stored function that extracts the "id" from the XML
  • create a computed, persisted column on your table which grabs that "id" using that stored function
  • create a unique index on your new, computed + persisted column

That would definitely work.

涫野音 2024-08-29 11:52:12

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

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

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

If it is not a separate field then I don't think you can.

But, you can add a trigger on insert which would extract GUID from the XML data and put it in a separate field. And then you can have a unique constraint on that field.

Another approach would be to create a nightly job, which would scan the database in search of duplicates.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文