Sql server 2005 SQL 2005 XML模式-定义唯一属性
下面是一个示例xml文档,我正在尝试为其创建模式:Sql server 2005 SQL 2005 XML模式-定义唯一属性,sql-server-2005,attributes,xsd,unique,Sql Server 2005,Attributes,Xsd,Unique,下面是一个示例xml文档,我正在尝试为其创建模式: '<Fields> <Field ID="-1">somevalue</Field> <Field ID="-2" /> <Field ID="-3" /> <Field ID="-4">Some other value</Field> <Field ID="-5" /> </Fields>' ' 一些价值 其他价值
'<Fields>
<Field ID="-1">somevalue</Field>
<Field ID="-2" />
<Field ID="-3" />
<Field ID="-4">Some other value</Field>
<Field ID="-5" />
</Fields>'
'
一些价值
其他价值
'
我正在尝试创建SQL Server 2005架构集合,以:1.防止重复id。
2.只允许使用负ID 我可以使用id属性的type=“xs:negativeInteger”实现负约束。但我无法在SQL 2005中创建唯一约束或key\keyref。如果我设置了type=“xs:ID”,那么我就不能用数字来表示我的ID值,更不用说负ID了 要么我错过了什么,要么这是不可能的。如果不可能,为什么SQL 2005不支持具有唯一属性的功能?在表上使用constraint\trigger或xml索引,或者我现在甚至无法想象的其他技术,是否有解决方法 非常感谢所有帮助。这里有一个使用(“键”也有效)的解决方案:
它验证了您的示例,并给出了以下错误:
<Fields>
<Field ID="-1">somevalue</Field>
<Field ID="-2" />
<Field ID="-3" />
<Field ID="-4">Some other value</Field>
<Field ID="-5" />
<Field ID="-2" > not unique </Field>
<Field ID="2" > not negative </Field>
<Field ID="hello"> not integer </Field>
</Fields>
一些价值
其他价值
不是唯一的
不负
非整数
编辑我不知道这是不是最好的方法,甚至是一个好方法。它是有效的,但我认为可能有一种更简单、更直接的方法。这里有一个使用(“键”也有效)的解决方案:
它验证了您的示例,并给出了以下错误:
<Fields>
<Field ID="-1">somevalue</Field>
<Field ID="-2" />
<Field ID="-3" />
<Field ID="-4">Some other value</Field>
<Field ID="-5" />
<Field ID="-2" > not unique </Field>
<Field ID="2" > not negative </Field>
<Field ID="hello"> not integer </Field>
</Fields>
一些价值
其他价值
不是唯一的
不负
非整数
编辑我不知道这是不是最好的方法,甚至是一个好方法。它是有效的,但我认为可能有一种更简单、更直截了当的方法。这是一篇老文章,但今天仍然相关,因为不支持独特的语法(也不需要与下面的答案一致) 您需要做的是创建一个绑定到模式的标量函数,该函数将提取您想要唯一的值 然后在包含xml列的表上创建一个持久化的计算列。此计算列将执行上面定义的模式绑定函数 最后,在持久化计算列上定义唯一约束。现在它不仅保证了唯一性,而且为快速搜索建立了索引 编辑- 这适用于需要在多行中唯一的顶级属性 如果需要在单个xml文档中的元素集合中具有唯一性,则该方法类似 创建一个函数,该函数将xml数据类型作为参数,返回值为BIT 然后对xml数据类型使用xpath自己检查唯一性。如果值是唯一的,则返回1;如果值不是唯一的,则返回0
最后,向调用标量函数的表添加一个check约束,并验证结果为1。这是一篇老文章,但今天仍然相关,因为不支持唯一语法(并且不需要与下面的答案一起) 您需要做的是创建一个绑定到模式的标量函数,该函数将提取您想要唯一的值 然后在包含xml列的表上创建一个持久化的计算列。此计算列将执行上面定义的模式绑定函数 最后,在持久化计算列上定义唯一约束。现在它不仅保证了唯一性,而且为快速搜索建立了索引 编辑- 这适用于需要在多行中唯一的顶级属性 如果需要在单个xml文档中的元素集合中具有唯一性,则该方法类似 创建一个函数,该函数将xml数据类型作为参数,返回值为BIT 然后对xml数据类型使用xpath自己检查唯一性。如果值是唯一的,则返回1;如果值不是唯一的,则返回0
最后,向调用标量函数的表添加一个check约束,并验证结果为1。尽管您的解决方案是有效的xsd,并且可以实现我需要强制执行的规则,但它不适用于SQL Server 2005。”“unique”显然不受支持,“key”也不受支持:-(真的吗?但它在规范中-请参阅我提供的链接。嗯……这是“第二版”的链接,也许他们只支持第一版?不-它也有unique/key:所以我猜他们根本没有实现整个规范。所以我的问题仍然存在,我如何在SQL 2005中强制我的ID是唯一的和负的。“,,SQL Server不支持这些。”…请参见此处虽然您的解决方案是有效的xsd,并且可以实现我需要强制执行的规则,但它不适用于SQL Server 2005。“unique”显然不受支持,“key”也不受支持:-(真的吗?但它在规范中-请参见我提供的链接。嗯……这是“第二版”的链接),也许他们只支持第一版?不-它也有unique/key:所以我猜他们根本没有实现整个规范。所以我的问题仍然存在,我如何在SQL 2005中强制我的ID是唯一的和负的。“,,而SQL Server不支持这些。”…参见此处