Sql server 属性上需要区分大小写才能查找重复项

Sql server 属性上需要区分大小写才能查找重复项,sql-server,xml,xpath,sqlxml,Sql Server,Xml,Xpath,Sqlxml,我有XML,例如: <History> <Event></Event> <Event></Event> </History> 添加排序顺序的过程如下所示: update Histories set XmlHistory.modify(' insert attribute SortOrder {sql:variable("@sortOrder")} into (Hist

我有XML,例如:

<History>
   <Event></Event>
   <Event></Event>
</History>
添加排序顺序的过程如下所示:

update Histories
   set 
   XmlHistory.modify('
      insert attribute SortOrder {sql:variable("@sortOrder")}
         into (History/Entry[not(@SortOrder)])[1]
      ')
where HistoryID=@historyID
这是在不存在时添加排序器。可能是小写版本已经存在,然后我添加大写版本?我不这么认为,因为我上面的选择似乎不区分大小写

  • 我怎样才能找到DUP?我想我需要一个区分大小写的文件
  • 我的更新会导致DUP吗
  • exist()
    区分大小写

    select m.c.query('.') theElement
           from Histories h
                  cross apply h.XMLHistory.nodes('History/Entry') m(c)
           where (
                XmlHistory.exist('(History/Entry[(@SortOrder)])')= 1       
                and XmlHistory.exist('(History/Entry[(@sortOrder)])')= 1 
            )
    
    这将返回同时具有
    SortOrder
    属性和
    SortOrder
    属性的元素

    选择m.c.query('.')作为元素
    从历史上看,h
    交叉应用h.XMLHistory.nodes('/History/Event')作为m(c)
    其中m.c.存在('@SortOrder')=1和
    m、 c.exist('@sortOrder')=1;
    
    exist()
    区分大小写

    select m.c.query('.') theElement
           from Histories h
                  cross apply h.XMLHistory.nodes('History/Entry') m(c)
           where (
                XmlHistory.exist('(History/Entry[(@SortOrder)])')= 1       
                and XmlHistory.exist('(History/Entry[(@sortOrder)])')= 1 
            )
    
    这将返回同时具有
    SortOrder
    属性和
    SortOrder
    属性的元素

    选择m.c.query('.')作为元素
    从历史上看,h
    交叉应用h.XMLHistory.nodes('/History/Event')作为m(c)
    其中m.c.存在('@SortOrder')=1和
    m、 c.exist('@sortOrder')=1;
    
    XPath与XML一样区分大小写。如果要选择每个
    条目
    名称为
    SortOrder
    的属性在任何字母大小写组合中使用:

    History/Entry[@*[translate(name(),'SORTDE','sortde') = 'sortorder']]
    

    XPath与XML一样区分大小写。如果要选择每个
    条目
    名称为
    SortOrder
    的属性在任何字母大小写组合中使用:

    History/Entry[@*[translate(name(),'SORTDE','sortde') = 'sortorder']]
    

    如果您使用的XQUERY
    sortorder
    不会返回
    sortorder
    的值,则它已经区分大小写。请使用此选项。请注意,每行只返回1个值,而不是2个值。我认为该值区分大小写,但不存在。看看这个。我添加了一个where-exists,只给出了小写的一个,但我得到了两个。这实际上是
    exist
    而不是
    exists
    <代码>存在是一个T-SQL关键字。因此,您可以使用
    ,其中YE.E.value('@sortorder','int')不为NULL(
    (基于我的db fiddle)来查找具有
    sortorder
    值的行。如果您使用XQUERY
    sortorder
    将不会返回
    sortorder
    的值,那么它已经区分大小写了。请注意,每行只返回1个值,而不是2个值。我认为该值区分大小写,但不存在。看看这个。我添加了一个where-exists,只给出了小写的一个,但我得到了两个。这实际上是
    exist
    而不是
    exists
    <代码>存在是一个T-SQL关键字。因此,您可以在YE.E.value(“@sortorder”,“int”)不为NULL的情况下使用
    (基于我的db fiddle)来查找具有
    sortorder
    值的行。