T-SQL 中唯一的 XML 元素约束
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,您可以
这将绝对有效。
Yes, you could
That would definitely work.
如果它不是一个单独的领域,那么我认为你不能。
但是,您可以在插入时添加一个触发器,该触发器将从 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.