SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » Скрипт sql в xml
Скрипт sql в xml [сообщение #2792] Tue, 18 July 2023 14:29 Переход к следующему сообщению
prospector в настоящее время не в онлайне  prospector
Сообщений: 5
Зарегистрирован: July 2023
Junior Member
Результатом выполнения скрипта:
if object_id('tempdb..#List', 'U') <> 0 drop table #List

create table #List(
	articul		nvarchar(50)
	,quantity	money
)
insert into #List select '00333', 5.0000
insert into #List select '00058', 1.0000

select
	1 as Tag
	,NULL as Parent
	,NULL as [items!1]
	,NULL as [item!2!articul]
	,NULL as [item!2!quantity]
union all
select
	2
	,1
	,NULL
	,articul
	,quantity
from #List 
for xml explicit, root('root')
будет файл:
<root>
  <items>
    <item articul="00333" quantity="5.0000" />
    <item articul="00058" quantity="1.0000" />
  </items>
</root>
1. Подскажите пожалуйста как сделать файл вида:
<root>
  <items>
    <item> 
       <articul>00333</articul>
       <quantity>5.0000</quantity>
    </item> 
       <articul>00058</articul>
       <quantity>1.0000</quantity>
    </item> 
  </items>
</root>
2. Можно ли в корневой элемент <root> добавить атрибут?:
<root date="2023-07-18 00:00:00">
</root>
Re: Скрипт sql в xml [сообщение #2793 является ответом на сообщение #2792] Tue, 18 July 2023 15:43 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 294
Зарегистрирован: June 2022
Senior Member
SELECT TRY_CAST(GETDATE() AS date) AS '@date', (
SELECT (
    SELECT *
    FROM (
		SELECT 	articul, quantity
		FROM #List
    ) AS v(articul, quantity)
    FOR XML PATH('item'), TYPE
)
FOR XML PATH('items'), TYPE
)
FOR XML PATH('root')
Re: Скрипт sql в xml [сообщение #2794 является ответом на сообщение #2793] Tue, 18 July 2023 16:51 Переход к предыдущему сообщениюПереход к следующему сообщению
prospector в настоящее время не в онлайне  prospector
Сообщений: 5
Зарегистрирован: July 2023
Junior Member
Спасибо, это оно. Smile
Re: Скрипт sql в xml [сообщение #2806 является ответом на сообщение #2794] Sat, 22 July 2023 19:27 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 294
Зарегистрирован: June 2022
Senior Member
use testdb
Go

declare
	@strSQL				nvarchar(1024)
	,@cmd				nvarchar(1024)
	,@OutputFileName nvarchar(256)

set @OutputFileName = 'c:\Shared\1.xml'


/*create table List(
	articul		nvarchar(50)
	,quantity	money
)
insert into List select '00333', 5.0000
insert into List select '00058', 1.0000*/


select @strSQL = ''
	+ 'select ''<?xml version=""1.0"" encoding=""utf-8""?>'' + ( '
	+ 'select CURRENT_TIMESTAMP [@date], ( '
	+ 'select ( '
		+ 'select * '
		+ 'from ( '
			+ 'select 	articul, quantity '
			+ 'from List'
		+ ') AS v(articul, quantity) '
		+ 'for xml path(''item''), TYPE '
	+ ') '
	+ 'for xml path(''items''), TYPE '
	+ ') '
	+ 'for xml path(''shop'') '
	+ ')'

select @cmd = 'bcp "'
	+ @strSQL
	+ '" '
    + 'queryout "' + @OutputFileName + '" -c -C 65001 -T ';

exec xp_cmdshell @cmd
Вот пример. Будет работать начиная с MS SQL 2014 SP2: KB3136780 - UTF-8 encoding support for the BCP utility and BULK INSERT Transact-SQL command in SQL Server 2014 SP2.

А использование xp_cmdshell не самый лучший вариант с точки зрения безопасности.

[Обновления: Sat, 22 July 2023 19:35]

Известить модератора

icon14.gif  Re: Скрипт sql в xml [сообщение #2809 является ответом на сообщение #2806] Sat, 22 July 2023 21:46 Переход к предыдущему сообщению
prospector в настоящее время не в онлайне  prospector
Сообщений: 5
Зарегистрирован: July 2023
Junior Member
Этот вариант работает даже на sql2005 Smile Спасибо

А без xp_cmdshell не получается - мне полученный файл нужно еще на ftp скопировать.
Предыдущая тема: Cтранный формат xml
Следующая тема: Сложный поиск соответствия.
Переход к форуму:
  


Текущее время: Mon Apr 29 14:18:05 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00663 секунд