Sql server 2005 SQL 2005 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>' ' 一些价值 其他价值

下面是一个示例xml文档,我正在尝试为其创建模式:

'<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索引,或者我现在甚至无法想象的其他技术,是否有解决方法

非常感谢所有帮助。

这里有一个使用(“键”也有效)的解决方案:


它验证了您的示例,并给出了以下错误:

  • 重复的身份证
  • 不是负整数的id
  • 以下是您的eg plus测试:

    <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>
    
    
    一些价值
    其他价值
    不是唯一的
    不负
    非整数
    
    编辑我不知道这是不是最好的方法,甚至是一个好方法。它是有效的,但我认为可能有一种更简单、更直接的方法。

    这里有一个使用(“键”也有效)的解决方案:

    
    
    它验证了您的示例,并给出了以下错误:

  • 重复的身份证
  • 不是负整数的id
  • 以下是您的eg plus测试:

    <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不支持这些。”…参见此处