Member 12965461 Ответов: 1

Как я могу найти количество любых данных из XML-артефакта.


& lt;myagreement>
< статус> n
<pkey> 2yk0000000056f3b
< hkey> 2yk0000000056f3b
< businessmodified & gt;2017-04-06 09:04:51
< myactive> 1


Все вышесказанное является частью XML-артефакта.В этом артефакте так много MyAgreement pkeys
Есть ли какая-либо sql-функция или какой-либо способ получить подсчет общего количества pkeys MyAgreement с помощью SQL-запроса.
Пожалуйста, ответьте как можно скорее.
Заранее спасибо!!

[EDIT from CHill60-OP code from a " solution"]
<MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>2yk0000000056f3a</PKey>
          <HKey>2yk0000000056f3a</HKey>
          <BusinessModified>2012-04-06 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>
      <MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>2yk0000000056f3b</PKey>
          <HKey>2yk0000000056f3b</HKey>
          <BusinessModified>2012-04-06 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>

XML-артефакт выглядит примерно так.Он содержит много MyAgreement Pkeys.Я просто хочу найти количество этих pkeys с помощью sql-запроса.Есть ли какой-нибудь способ?

Что я уже пробовал:

Я попробовал функцию подстроки, функцию charindex.

CHill60

Это недопустимый XML, поэтому на данный момент нет простого способа сделать то, что вы хотите. Если у вас есть лучший пример того, что вы на самом деле помещаете в колонку, мы могли бы помочь

Member 12965461

& lt;myagreement>
< статус> n
< au & gt;000100U1
<pkey> 2yk0000000056f3a
<hkey> 2yk0000000056f3a
< businessmodified> 2012-04-06 19:04:51
< myactive> 1


& lt;myagreement>
< статус> n
< au & gt;000100U1
<pkey> 2yk0000000056f3b
< hkey> 2yk0000000056f3b
< businessmodified> 2012-04-06 19:04:51
< myactive> 1



XML-артефакт выглядит примерно так.Он содержит много MyAgreement Pkeys.Я просто хочу найти количество этих pkeys с помощью sql-запроса.Есть ли какой-нибудь способ?

CHill60

Это все еще не является допустимым XML. Как называется корневой элемент?

1 Ответов

Рейтинг:
2

CHill60

Я собираюсь предположить, что вы вставляете в столбец действительный XML-файл, а не то, что Вы нам показали до сих пор.

Я создал примерную таблицу, подобную этой:

CREATE TABLE test (id int identity(1,1), xmlcol XML)
insert into test values
('<Agreements>
<MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>2yk0000000056f3a</PKey>
          <HKey>2yk0000000056f3a</HKey>
          <BusinessModified>2012-04-06 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>
      <MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>2yk0000000056f3b</PKey>
          <HKey>2yk0000000056f3b</HKey>
          <BusinessModified>2012-04-06 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>
</Agreements>
'),
('<Agreements>
<MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>4yk0000000056f3a</PKey>
          <HKey>4yk0000000056f3a</HKey>
          <BusinessModified>2012-04-07 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>
      <MyAgreement>
          <Status>n</Status>
          <Au>000100U1</Au>
          <PKey>4yk0000000056f3b</PKey>
          <HKey>4yk0000000056f3b</HKey>
          <BusinessModified>2012-04-07 19:04:51</BusinessModified>
          <MyActive>1</MyActive>
       
      </MyAgreement>
</Agreements>
')

Обратите внимание, что я предполагаю, что корневой узел XML-это Agreements - измените это в запросе, если оно неверно.

Вы можете получить все PKey узлы, перечисленные в этом запросе:
select id,
n.x.value('PKey[1]', 'VARCHAR(25)') AS [pkey]
FROM test
CROSS APPLY xmlcol.nodes('/Agreements/MyAgreement') n(x)
Итак, чтобы получить счет PKey узлы помещают это в подзапрос таким образом:
select id, count(*) from
(
	select id,
	n.x.value('PKey[1]', 'VARCHAR(25)') AS [pkey]
	FROM test
	CROSS APPLY xmlcol.nodes('/Agreements/MyAgreement') n(x)
) as q
group by id

Существует ряд статей, доступных для запроса XML-столбцов в SQL Server, вот одна из них: Семинар по XML[^]