Начало » Использование СУБД » Microsoft SQL Server » Скрипт sql в xml 
	
		
		
			| Скрипт sql в xml [сообщение #2792] | 
			Tue, 18 July 2023 14:29   | 
		 
		
			
				
				
				
					
						  
						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 [сообщение #2806 является ответом на сообщение #2794] | 
			Sat, 22 July 2023 19:27    | 
		 
		
			
				
				
				
					
						  
						BlackEric
						 Сообщений: 393 Зарегистрирован: 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] Известить модератора  
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 11:13:36 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.00766 секунд 
 |