Как преобразовать результат SQL-запроса в HTML-теги с атрибутами - PullRequest
2 голосов
/ 30 апреля 2019

Рассмотрим приведенную ниже таблицу в базе данных SQL-Server:

Id    ProductName   Price    Size
-----------------------------------
1     T-Shirt       1000     M
2     Jeans         1800     L

Как преобразовать эту таблицу в строку ниже HTML:

<div class='row' Id='1' size='M'>
    <div class='cell'>T-Shirt</div> 
    <div class='cell'>1000</div>
</div>
<div class='row' Id='2' size='L'>
    <div class='cell'>Jeans</div> 
    <div class='cell'>1800</div>
</div>

Ответы [ 2 ]

6 голосов
/ 30 апреля 2019

Попробуйте это так:

Сначала таблица макетов (Пожалуйста, сделайте это самостоятельно в следующий раз):

DECLARE @tbl TABLE(Id INT,ProductName VARCHAR(100),Price DECIMAL(10,4),Size VARCHAR(10));
INSERT INTO @tbl VALUES
 (1,'T-Shirt',1000,'M')
,(2,'Jeans',1800,'L');

В запросе будет использоваться FOR XML PATH, который обеспечивает наивысший контроль над именами XML

SELECT 'row' AS [@class]
      ,t.Id AS [@Id]
      ,t.Size AS [@size]
      ,'cell' AS [div/@class]
      ,t.ProductName AS [div]
      ,''
      ,'cell' AS [div/@class]
      ,t.Price AS [div]
FROM @tbl t
FOR XML PATH('div');

Результат:

<div class="row" Id="1" size="M">
  <div class="cell">T-Shirt</div>
  <div class="cell">1000.0000</div>
</div>
<div class="row" Id="2" size="L">
  <div class="cell">Jeans</div>
  <div class="cell">1800.0000</div>
</div>

Подсказка1: нам нужен пустой ,'' в середине, чтобы начать новый <div> элемент.В противном случае механизм выдаст ошибку.

Подсказка2: типичная HTML-таблица может быть построена с использованием некоторого XQuery

0 голосов
/ 30 апреля 2019

@ Шнуго избил меня до этого.В качестве альтернативы вы можете просто сделать это:

DECLARE @table TABLE (ID INT, ProductName VARCHAR(100), Price INT, SIZE CHAR(1));
INSERT @table VALUES (1,'T-Shirt',1000,'M'),(2,'Jeans',1800,'L');

SELECT 
'<div class="row" Id="'+LEFT(t.ID,30)+'" size="'+t.SIZE+'">
    <div class="cell">'+t.ProductName+'</div> 
    <div class="cell">'+LEFT(t.Price,30)+'</div>
</div>'
FROM @table AS t;

Что возвращает:

<div class="row" Id="1" size="M">
    <div class="cell">T-Shirt</div> 
    <div class="cell">1000</div>
</div>
<div class="row" Id="2" size="L">
    <div class="cell">Jeans</div> 
    <div class="cell">1800</div>
</div>
...