Pull to refresh

Comments 9

UFO just landed and posted this here
Возможно стоит сделать некий замер скорости формирования XML с помощью средств T-SQL и например технологии LINQ to XML в C#
UFO just landed and posted this here
SQLCLR в 2019 сервере какую версию фрейворка использует? не ищется.
Автором комментария имелась ввиду интеграция SQL Server со средой CLR инфраструктуры .NET Framework. Например, формирование XML-документа можно реализовать в виде хранимой процедуры или пользовательской функции для SQL Server на языке C#. Подробнее можно посмотреть тут.
Это понятно, я вот и спрашиваю: с какой версией Net Framework интегрируется? В SqlServer 2017 всё еще была версия .Net Framework 2.0. Или как указать целевую версию…
Для SQL Server версия .NET Framework не важна. Код, который вы пишите на С# или VB компилируется в байт-код CIL, общий для CLR.

Что то дикий какой то XML фрагмент получился:


XML из статьи
<lev:ProductClass xmlns:lev="uri1">
  <lev:ProductClassName>Class_1</lev:ProductClassName>
  <lev:Products>
    <lev:ProductName xmlns:lev="uri1">Product_1</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_4</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_7</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_10</lev:ProductName>
  </lev:Products>
</lev:ProductClass>
<lev:ProductClass xmlns:lev="uri1">
  <lev:ProductClassName>Class_2</lev:ProductClassName>
  <lev:Products>
    <lev:ProductName xmlns:lev="uri1">Product_2</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_5</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_9</lev:ProductName>
  </lev:Products>
</lev:ProductClass>
<lev:ProductClass xmlns:lev="uri1">
  <lev:ProductClassName>Class_3</lev:ProductClassName>
  <lev:Products>
    <lev:ProductName xmlns:lev="uri1">Product_3</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_6</lev:ProductName>
    <lev:ProductName xmlns:lev="uri1">Product_8</lev:ProductName>
  </lev:Products>
</lev:ProductClass>

Здесь куча префиксов и определений одного и того же пространства имён.


Коли используется одно пространство имён для всех элементов то достаточно его добавить
поумолчанию и все эти префиксы будут не нужны.


Судя по справке в WITH XMLNAMESPACES можно задать пространство имён поумолчанию указав только URI.


Возможно код можно поправить так:


WITH XMLNAMESPACES (DEFAULT 'uri1')  
select pc.ProductClassName as "ProductClassName"
    ,(select p.ProductName as "ProductName"
        from dbo.Product p
    where p.ProductClassId = pc.ProductClassId
        for xml path(''), type) as "Products"
from dbo.ProductClass pc
    for xml path('ProductClass'), type

В результате предполагаю должно получится так:


<ProductClass xmlns="uri1">
  <ProductClassName>Class_1</ProductClassName>
  <Products>
    <ProductName>Product_1</ProductName>
    <ProductName>Product_4</ProductName>
    <ProductName>Product_7</ProductName>
    <ProductName>Product_10</ProductName>
  </Products>
</ProductClass>
<ProductClass xmlns="uri1">
  <ProductClassName>Class_2</ProductClassName>
  <Products>
    <ProductName>Product_2</ProductName>
    <ProductName>Product_5</ProductName>
    <ProductName>Product_9</ProductName>
  </Products>
</ProductClass>
<ProductClass xmlns="uri1">
  <ProductClassName>Class_3</ProductClassName>
  <Products>
    <ProductName>Product_3</ProductName>
    <ProductName>Product_6</ProductName>
    <ProductName>Product_8</ProductName>
  </Products>
</ProductClass>

Здесь всем элементам задано пространство имён и нет перегруза определениями и префиксами.

Да, вы правы. Для понимания Ваш вариант лучше, в ближайшее время внесу изменения. Спасибо за замечание
Sign up to leave a comment.

Articles