Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Работа с XML через TSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 671
Добрый день.

Сразу оговорюсь, пока не силён в работе с XML.

Как создать XML следующего формата:


Обязательные данные 1 (тип INT)
Обязательные данные 2 (тип DATETIME)
Обязательные данные 3 (тип NVARCHAR)
Набор данных (
___произвольная строка 1
___произвольная строка 2
___произвольная строка 3
___произвольная строка n
)

как создать набор данных, вопросов не возникло:
SELECT 
  [Key], [Surname], [Name], [Middlename]
FROM
  [TestClient]      
FOR XML AUTO


но вот не могу понять как быть дальше, помогите разобраться?
23 сен 16, 14:48    [19700858]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Игорь_UUS,

Вы для начали поглядели бы как все таки выглядит xml
не так уж точно
автор
Обязательные данные 1 (тип INT)
Обязательные данные 2 (тип DATETIME)
Обязательные данные 3 (тип NVARCHAR)
Набор данных (
___произвольная строка 1
___произвольная строка 2
___произвольная строка 3
___произвольная строка n
)
23 сен 16, 15:00    [19700934]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 671
WarAnt
Игорь_UUS,

Вы для начали поглядели бы как все таки выглядит xml
не так уж точно
автор
Обязательные данные 1 (тип INT)
Обязательные данные 2 (тип DATETIME)
Обязательные данные 3 (тип NVARCHAR)
Набор данных (
___произвольная строка 1
___произвольная строка 2
___произвольная строка 3
___произвольная строка n
)


писал на скорую руку.

я получаю формат XML по необходимому набору данных
<TestClient Key="1" Surname="Романова" Name="Евгения" Middlename="Сергеевна" />
<TestClient Key="2" Surname="Удовикина" Name="Ирина" Middlename="Викторовна" />
<TestClient Key="3" Surname="Лункина" Name="Людмила" Middlename="Ивановна" />

но этого недостаточно...

попробовал что-то типа этого, но не выходит как надо
SELECT 12345 AS [t1], 'тест' AS [t2], GETDATE() AS [t3],
  (
  SELECT 
    [Key], [Surname], [Name], [Middlename]
  FROM
    [CL_Client]      
  FOR XML AUTO/*RAW, ELEMENTS, TYPE*/--, ROOT('MyRoot')
  ) AS [xml] FOR XML AUTO
23 сен 16, 15:10    [19701014]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Игорь_UUS,

Вы покажите, как надо
23 сен 16, 15:11    [19701035]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 671
doos
Игорь_UUS,

Вы покажите, как надо


Я показал, видимо не понятно. Попробую на словах, нужен XML с 1 нодой, которая имеет 4 атрибута, 4-й атрибут имеет дочерние ноды (я его назвал набор данных)
23 сен 16, 15:21    [19701124]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Игорь_UUS,

Попробуйте в студии выполнить вот это:

SELECT 
  '1' "@attr1"
   ,'2' "@attr2"
   ,'3' "@attr3"
   ,(select
		'aaa' "@node_attr"
	FOR XML path('node'), type)   
FOR XML path('root')
23 сен 16, 15:28    [19701184]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Игорь_UUS,

Вот такой запрос:
SELECT 
  '1' "@attr1"
   ,'2' "@attr2"
   ,'3' "@attr3"
   ,'aaa' "node_text1"
   ,'bbb' "node_text2"
   ,'bbb' "node_text3"   
FOR XML path('root')

выведет вот такой XML:
<root attr1="1" attr2="2" attr3="3">
  <node_text1>aaa</node_text1>
  <node_text2>bbb</node_text2>
  <node_text3>bbb</node_text3>
</root>
23 сен 16, 15:36    [19701264]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 671
doos,

Очень близко к правде
SELECT 
  '1' "@attr1"
   ,'2' "@attr2"
   ,'3' "@attr3"
   ,(SELECT 
    [Key], [Surname], [Name], [Middlename]
  FROM
    [CL_Client]      
  FOR XML path('node'), type)
FOR XML path('root')


результат

<root attr1="1" attr2="2" attr3="3">
  <node>
    <Key>1</Key>
    <Surname>Романова</Surname>
    <Name>Евгения</Name>
    <Middlename>Сергеевна</Middlename>
  </node>
  <node>
    <Key>2</Key>
    <Surname>Удовикина</Surname>
    <Name>Ирина</Name>
    <Middlename>Викторовна</Middlename>
  </node>
  <node>
    <Key>3</Key>
    <Surname>Лункина</Surname>
    <Name>Людмила</Name>
    <Middlename>Ивановна</Middlename>
  </node>
</root>


но надо получается так:
<root attr1="1" attr2="2" attr3="3">
   <node Key="1" Surname="Романова" Name="Евгения" Middlename="Сергеевна" />
   <node Key="2" Surname="Удовикина" Name="Ирина" Middlename="Викторовна" />
   <node Key="3" Surname="Лункина" Name="Людмила" Middlename="Ивановна" />
</root>
23 сен 16, 15:38    [19701273]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Игорь_UUS,

SELECT 
  '1' "@attr1"
   ,'2' "@attr2"
   ,'3' "@attr3"
   ,(SELECT 
    [Key] "@key"
	,[Surname] "@surname"
	,[Name] "@name"
	,[Middlename] "@middlename"
  FROM [CL_Client]      
  FOR XML path('node'), type)
FOR XML path('root')
23 сен 16, 15:42    [19701304]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 671
doos,

огромное спасибо! получилось
23 сен 16, 15:46    [19701325]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
ИгорьUUS
Guest
Игорь_UUS,

Возник ещё вопрос про XML:

Можно ли как-то передать в XML тип поля, чтоб можно было понимать, что одно поле INT, другое полу String, третье DateTime и т.д.?
25 сен 16, 09:48    [19705440]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
ИгорьUUS,
XSD для этого
25 сен 16, 10:21    [19705454]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML через TSQL  [new]
ИгорьUUS
Guest
Ken@t
ИгорьUUS,
XSD для этого


А как в запрос
SELECT 
  '1' "@attr1"
   ,548 "@attr2"
   ,GETDATE() "@attr3"
FOR XML path('root')

подсунуть xsd, первый атрибут string, второй int, третий datetime?
25 сен 16, 10:39    [19705463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить