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

Откуда:
Сообщений: 97
Возник вопрос по формированию xml-документа: существует такой запрос: select
last_name as 'Cell/Data',
(select first_name as 'Cell/Data' from dbo.Tmpresult t1
where t1.id=t2.id
for xml path(''),type ),
(select middle_name as 'Cell/Data' from Energo.dbo.Tmpresult t1
where t1.id=t2.id
for xml path(''),type )
from dbo.Tmpresult t2
FOR XML Path('Row'),type,root('Table')


Он выводит след рез-т
<Table>
<Row>
<Cell>
<Data>Иванов</Data>
</Cell>
<Cell>
<Data>Иван</Data>
</Cell>
<Cell>
<Data>Иванович</Data>
</Cell>
</Row>
</Table>


Не подскажете как в тег Data добавить значение ss:Type="String"
чтобы выглядело след.образом:
<Table>
<Row>
<Cell>
<Data ss:Type="String">Иванов</Data>
</Cell>
<Cell>
<Data ss:Type="String">Иван</Data>
</Cell>
<Cell>
<Data ss:Type="String">Иванович</Data>
</Cell>
</Row>
</Table>
14 окт 14, 16:44    [16703075]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Вам нужна конструкция WITH XMLNAMESPACES (Transact-SQL)

http://technet.microsoft.com/en-us/library/ms177607(v=sql.110).aspx
http://technet.microsoft.com/en-us/library/ms177400(v=sql.110).aspx
14 окт 14, 16:50    [16703096]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
a_voronin,

Скажите, а без пространства имен никак не обойтись?
14 окт 14, 16:55    [16703127]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
sabitaidr
a_voronin,

Скажите, а без пространства имен никак не обойтись?


если оно у вас есть в конечном документе, то никак ,

если вы хотите просто вставить

<Data Type="String">
, то оно не нужно
14 окт 14, 17:05    [16703183]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
a_voronin,
необходимо на выходе получить такой документ:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Лист1">
<Table>
<Row>
<Cell><Data ss:Type="String">Иванов</Data></Cell>
<Cell><Data ss:Type="String">Иван</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">Петров</Data></Cell>
<Cell><Data ss:Type="Number">Петр</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>

в этом случае как быть
14 окт 14, 17:11    [16703215]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
a_voronin,
не подскажете как это примерно делается, что-то совсем не получается.
15 окт 14, 10:07    [16705787]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
sabitaidr,

Приведите полный исполняемый скрипт со входными данными, которые даёт ваш результат, чтобы можно было его подправить
15 окт 14, 14:16    [16707495]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
a_voronin,

Есть такая таблица Tmpresult, в которой хранятся данные: ФИО, данные о человеке, инн, остатки, платежи и т.д.
Например: select * from tmpresult
last_namemiddle_nameinnpassportrestpayments
ИвановИван1651897651296324525.8428/11/2008=1=495.00;22/04/2009=1=40000.00
ПетровПетр1987659873249657810986.9825/12/2013=1=85878.00;25/10/2013=1=85878.00


Необходимо сформировать xml файл такого типа(Этот файл получается, если эту таблицу сохранить в Excel в формате "Таблица XML 2003):
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet ss:Name="Лист1">
  <Table>
   <Row>
    <Cell><Data ss:Type="String">last_name</Data></Cell>
    <Cell><Data ss:Type="String">middle_name</Data></Cell>
    <Cell><Data ss:Type="String">inn</Data></Cell>
    <Cell><Data ss:Type="String">passport</Data></Cell>
    <Cell><Data ss:Type="String">rest</Data></Cell>
    <Cell><Data ss:Type="String">payments</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Иванов</Data></Cell>
    <Cell><Data ss:Type="String">Иван</Data></Cell>
    <Cell><Data ss:Type="Number">16518976512</Data></Cell>
    <Cell><Data ss:Type="Number">963245</Data></Cell>
    <Cell><Data ss:Type="Number">25.84</Data></Cell>
    <Cell><Data ss:Type="String">28/11/2008=1=495.00;22/04/2009=1=40000.00</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Петров</Data></Cell>
    <Cell><Data ss:Type="String">Петр</Data></Cell>
    <Cell><Data ss:Type="Number">19876598732</Data></Cell>
    <Cell><Data ss:Type="Number">496578</Data></Cell>
    <Cell><Data ss:Type="Number">10986.98</Data></Cell>
    <Cell><Data ss:Type="String">25/12/2013=1=85878.00;25/10/2013=1=85878.00;</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>
15 окт 14, 16:32    [16708745]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
sabitaidr,

Вы не хотите сделать по уму эту задачу?

взять SSIS и вставить данные через Excel destination?

Или через JET provider

Или через OpenDocument на C# (можно в том же SSIS)
15 окт 14, 18:21    [16709554]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6175
sabitaidr,

я лично бы сделал так:
выборку вида
<root>
  <row
    last_name="Иванов"
    middle_name="Иван"
    inn="16518976512"
    passport="963245"
    rest="25.84"
    payments="28/11/2008=1=495.00;22/04/2009=1=40000.00" />
  <row
    last_name="Петров"
    middle_name="Петр"
    inn="19876598732"
    passport="496578"
    rest="10986.98"
    payments="25/12/2013=1=85878.00;25/10/2013=1=85878.00" />
</root>

обработал бы с помощью чего-то типа такого:
+
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
  <xsl:template match="/">
    <xsl:processing-instruction name="mso-application">
      <xsl:text>progid="Excel.Sheet"</xsl:text>
    </xsl:processing-instruction>
    <ss:Workbook
      xmlns="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:o="urn:schemas-microsoft-com:office:office"
      xmlns:x="urn:schemas-microsoft-com:office:excel"
      xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:html="http://www.w3.org/TR/REC-html40">
      <xsl:apply-templates/>
    </ss:Workbook>
  </xsl:template>
  
  <xsl:template name="cell">
    <xsl:param name="type"/>
    <xsl:param name="attribute"/>
    <ss:Cell>
      <xsl:if test="$attribute">
        <ss:Data ss:Type="{$type}">
          <xsl:value-of select="$attribute"/>
        </ss:Data>
      </xsl:if>
    </ss:Cell>
  </xsl:template>

  <xsl:template match="/root">
    <ss:Worksheet ss:Name="Лист1">
      <ss:Table>
        <ss:Row>
          <xsl:for-each select="row[1]/@*">
            <ss:Cell>
              <ss:Data ss:Type="String">
                <xsl:value-of select="local-name(.)" />
              </ss:Data>
            </ss:Cell>
          </xsl:for-each>
        </ss:Row>
        <xsl:apply-templates/>
      </ss:Table>
    </ss:Worksheet>
  </xsl:template>
  
  <xsl:template match="row">
    <ss:Row>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@last_name"/>
        <xsl:with-param name="type" select="'String'"/>
      </xsl:call-template>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@middle_name"/>
        <xsl:with-param name="type" select="'String'"/>
      </xsl:call-template>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@inn"/>
        <xsl:with-param name="type" select="'Number'"/>
      </xsl:call-template>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@passport"/>
        <xsl:with-param name="type" select="'Number'"/>
      </xsl:call-template>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@rest"/>
        <xsl:with-param name="type" select="'Number'"/>
      </xsl:call-template>
      <xsl:call-template name="cell">
        <xsl:with-param name="attribute" select="@payments"/>
        <xsl:with-param name="type" select="'String'"/>
      </xsl:call-template>
    </ss:Row>
  </xsl:template>
</xsl:stylesheet>

вариант 2 - см. здесь: 7958157 и ниже
16 окт 14, 07:31    [16711488]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
if OBJECT_ID('tempdb..#tmpresult') is not null drop table #tmpresult
create table #tmpresult(id int,last_name varchar(50),middle_name varchar(50), inn varchar(50), passport varchar(50), rest varchar(50),payments varchar(500))
insert into #tmpresult(id,last_name,middle_name,inn,passport,rest,payments)
select 1,'Иванов','Иван', '16518976512', '963245', '25.84', '28/11/2008=1=495.00;22/04/2009=1=40000.00' 
union select 2,'Петров','Петр','19876598732','496578','10986.98','25/12/2013=1=85878.00;25/10/2013=1=85878.00' 


;WITH XMLNAMESPACES ('urn:schemas-microsoft-com:office:office' as o
 ,'urn:schemas-microsoft-com:office:excel' as x
 ,'urn:schemas-microsoft-com:office:spreadsheet' as ss
 ,'http://www.w3.org/TR/REC-html40' as html
 ,default 'urn:schemas-microsoft-com:office:office'
 ) 
select
(select a.[Type] as [Data/@ss:Type], a.[Value] as [Data/*] from    
  (values ('String','last_name'),('String','middle_name'),('String', 'inn'),('String','passport'),('String','rest'),('String', 'payments')) a([Type], [Value])
  for xml path('Cell'),type)  as [Row]
,(select b.c as [Row]
from
 #tmpresult t 
 cross apply
 (
   select a.[Type] as [Data/@ss:Type], a.[Value] as [Data/*] 
   from    
   (values ('String', t.last_name),('String', t.middle_name),('Number', t.inn),('Number', t.passport),('Number', t.rest),('String', t.payments)) a([Type], [Value])
   for xml path('Cell'),type
 ) b(c)
for xml path(''), type) [Table]
FOR XML PATH('Worksheet'),ROOT('Workbook'),type

 
16 окт 14, 09:05    [16711646]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
a_voronin,
Конечно лучше по уму. Если подскажете как будет удобнее, и в каком направлении двигаться будет замечательно:
Ситуация такая: В этой таблице около 90 столбцов (знаю, что много, но как есть), а строк пока около 1500 но планируется, что будет около 30-40 тыс.
каждую ночь запускается job, который обновляет данные в таблице и добавляет в нее новые. Так вот, каждое утро необходимо, чтобы данные из таблицы записывались в файл в формате, который я привел(формат именно такой).
16 окт 14, 11:35    [16712395]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
Хитрый жук
Member

Откуда:
Сообщений: 9
sabitaidr
я вчера попробовал это сделать с помощью FOR XML EXPLICIT, вроде получилось, но без понятия как вставить
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>

и к тому же всё громоздко как-то слишком.
ИМХО лучше всего написать SQL CLR процедуру, которая выдаст результат. В C# гораздо удобнее получится.
16 окт 14, 13:29    [16713527]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
ваш xml-файл загружается в Excel как простая табличка ... и точно также в Excel загрузится csv-файл
формата
field1;field2;field3;......;field90
........
(100500 строк)
а сделать экспорт таблицы в csv элементарно
16 окт 14, 14:20    [16714008]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
sabitaidr,

Если число столбцов не меняется, то используйте Excel Destination в SSIS, если меняется, то OpenDocument. Можно извращаться с запросами, но вы так и не привели кода, который генерит тестовые данные.
16 окт 14, 15:13    [16714541]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
Я не до конца объяснил. Мне эти файлы в Excel загружать не нужно (мне нужен только этот дурацкий формат "таблицы xml"). В-общем смысл такой: в этой таблице хранятся данные о клиентах, их кредитах, платежах, просрочках и т.д. Необходимо выгрузить эти данные для того, чтобы загрузить их в другое ПО. Загрузка в другое ПО происходит через интерфейс путем выбора выбора этого файла и кнопки "Загрузить". Хотелось бы, чтобы каждое утро выгружался этот файл для того, чтобы его можно было сразу загрузить в другое ПО.
На данный момент это делается в ручном режиме, а именно выгружаются эти данные в excel, потом сохраняем этот файл как "Таблица xml" и загружаем его. Вот и хотелось бы, чтобы данные из базы сразу выгружались в нужном формате
16 окт 14, 16:06    [16714976]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
sabitaidr,

Вам LexusR уже написал запрос

, единственно у него xmlns-ы размножились, может кто скажет по этому поводу

+
<Workbook xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Worksheet>
<Row>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">last_name</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">middle_name</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">inn</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">passport</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">rest</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">payments</Data>
</Cell>
</Row>
<Table>
<Row xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">Иванов</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">Иван</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">16518976512</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">963245</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">25.84</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">28/11/2008=1=495.00;22/04/2009=1=40000.00</Data>
</Cell>
</Row>
<Row xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">Петров</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">Петр</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">19876598732</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">496578</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="Number">10986.98</Data>
</Cell>
<Cell xmlns="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">
<Data ss:Type="String">25/12/2013=1=85878.00;25/10/2013=1=85878.00</Data>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>

16 окт 14, 16:51    [16715390]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
Хитрый жук
Member

Откуда:
Сообщений: 9
a_voronin,

чтобы их не было используйте FOR XML EXPLICIT, но он не совсем удобен. я вчера уже на это напоролся
16 окт 14, 17:45    [16715990]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Хитрый жук,

так запостите свой пример
16 окт 14, 18:08    [16716128]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
сгенерировано функцией от Mnior
функция от Mnior
DECLARE @Result nvarchar(max)
;WITH XMLNAMESPACES(Default 'urn:schemas-microsoft-com:office:spreadsheet','urn:schemas-microsoft-com:office:spreadsheet' AS ss)
SELECT @Result = N'<?xml version="1.0" encoding="UTF-16"?><?mso-application progid="Excel.Sheet"?>' 
+ Convert(nvarchar(max),(SELECT	 
NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[last_name]			AS [Cell/Data/text()]
,NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[middle_name]		AS [Cell/Data/text()]
,NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[inn]				AS [Cell/Data/text()]
,NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[passport]			AS [Cell/Data/text()]
,NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[rest]				AS [Cell/Data/text()]
,NULL AS [text()],'String'  AS [Cell/Data/@ss:Type],[payments]			AS [Cell/Data/text()]
FROM	tmpresult WITH(NoLock)
FOR XML Path('Row'),Root('Table'),Type).query('
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet ss:Name="Лист1">
  <Table>  
   <Row><Cell><Data ss:Type="String">last_name</Data></Cell><Cell><Data ss:Type="String">middle_name</Data></Cell><Cell><Data ss:Type="String">inn</Data></Cell><Cell><Data ss:Type="String">passport</Data></Cell><Cell><Data ss:Type="String">rest</Data></Cell><Cell><Data ss:Type="String">payments</Data></Cell></Row>
   {/Table/Row}
  </Table>
 </Worksheet>
</Workbook>'))
SELECT @Result
17 окт 14, 07:38    [16717851]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по for xml  [new]
sabitaidr
Member

Откуда:
Сообщений: 97
LexusR,
Спасибо. Все нормально, но с моей таблицей это не работает. Но думаю, здесь в самой таблице дело, и что в ней хранится, буду смотреть. Спасибо еще раз
17 окт 14, 14:05    [16720766]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить