Sql server 属性上需要区分大小写才能查找重复项
我有XML,例如: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
<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
这是在不存在时添加排序器。可能是小写版本已经存在,然后我添加大写版本?我不这么认为,因为我上面的选择似乎不区分大小写
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
值的行。如果您使用XQUERYsortorder
将不会返回sortorder
的值,那么它已经区分大小写了。请注意,每行只返回1个值,而不是2个值。我认为该值区分大小写,但不存在。看看这个。我添加了一个where-exists,只给出了小写的一个,但我得到了两个。这实际上是exist
而不是exists
<代码>存在是一个T-SQL关键字。因此,您可以在YE.E.value(“@sortorder”,“int”)不为NULL的情况下使用(基于我的db fiddle)来查找具有sortorder
值的行。