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

Откуда:
Сообщений: 91
Всем доброго времени суток!

Извиняюсь, если этот вопрос уже раньше обсуждался - я в поиске ничего не нашел.

MSSQL 2005. Стоит задача отдавать из стореной результаты SELECT-a в виде уже готовой HTML-таблицы.

Погуглил на эту тему и нашел, на первый взгляд, достаточно хорошее и простое решение:

SELECT
   'TD' = FieldName1
FROM
   DB.dbo.SomeTable
FOR XML PATH ('TR')

Результат останется завернуть в тэг TABLE и всё будет ок.

Однако, если мне надо более одной колонки, то всё уже хуже, запрос вида:
SELECT
   'TD' = FieldName1,
   'TD' = FieldName2
FROM
   DB.dbo.SomeTable
FOR XML PATH ('TR')

опять-таки вернет "таблицу" с одной колонкой - FieldName2. Ну, в общем-то, можно понять почему, правда мне не легче.

Переписал таким образом:

DECLARE
   @str varchar(MAX)

SET @str = (
           SELECT
              '<TD>' + FieldName1 + '</TD>',
              '<TD>' + FieldName2 + '</TD>'
           FROM
              DB.dbo.SomeTable
           FOR XML PATH('TR')
           )

SET @str = REPLACE(@str, '<', '<')
SET @str = REPLACE(@str, '>', '>')

PRINT
   @str

Проблему решает, но выглядит коряво.

Есть более красивые способы получения HTML-таблицы?
28 июл 09, 13:06    [7468431]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
В записи
SET @str = REPLACE(@str, '<', '<')
под '<' имелось в виду '&_l_t_;'
28 июл 09, 13:09    [7468441]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
так ? )
select
  [Tag] = 1,
  [Parent] = 0,
  [tr!1!td!element]= FieldName1,
  [tr!1!td!element]= FieldName2
from DB.dbo.SomeTable
for xml explicit;
28 июл 09, 13:17    [7468483]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
Зайцев Фёдор
так ? )
select
  [Tag] = 1,
  [Parent] = 0,
  [tr!1!td!element]= FieldName1,
  [tr!1!td!element]= FieldName2
from DB.dbo.SomeTable
for xml explicit;


Да, выглядит отлично, спасибо!
28 июл 09, 14:02    [7468742]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

Столкнулся с такой проблемой:
Есть основная стореная, которая возвращает полученный HTML. В этой стореной в цикле дергается
вспомогательная процедура, в которую передается ID некой сущности, для которой генерируется "<TABLE>", который отдается вызывающей процедуре через OUTPUT-параметр типа varchar(MAX) (в переменную такого же типа он там и записывается). Если вкраце, то во вспомогательной процедуре все сводится к :

DECLARE @s varchar(MAX)
SET @s = (
   SELECT
     [Tag]             = 1,
     [Parent]          = 0,
     [TR!1!TR!ELEMENT] = SomeFields
   FROM
      SomeTable (NOLOCK)
   FOR XML EXPLICIT
)

Так вот, если результирующая выборка получается большой, то было выяснено, что присвоение "SET @s =" обрезает её до 65535-ти символов. Самое интересное, когда я убираю это присвоение, то получаю нормальные данные, размера ~230000 символов, копирую их, в отдельном окошке Management Studio присваиваю опять-таки переменной varchar(MAX) и получаю корректные данные, по крайней мере LEN(@s) говорит что там ~230000 символов. Т.е. как бы, нет у varchar(MAX) ограничений на длину... может, существуют какие-нибудь особенности OUTPUT-параметров или что-нибудь еще? Буду пробовать избавиться от OUTPUT-ов, но если не поможет, даже и не знаю что делать... Может, у кого-нибудь имеются соображения по этому поводу?
3 авг 09, 12:18    [7490210]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
По ходу так и есть, OUTPUT параметры для varchar-a ограничены в 8000 байт...
3 авг 09, 12:44    [7490367]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
Тем не менее, вышеупомянутый запрос всё равно обрезает полученный xml до 65535-ти символов...
DECLARE @s varchar(MAX)
SET @s = (
   SELECT
     [Tag]             = 1,
     [Parent]          = 0,
     [TR!1!TR!ELEMENT] = SomeFields
   FROM
      SomeTable (NOLOCK)
   FOR XML EXPLICIT
)
3 авг 09, 12:59    [7490459]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
sherzod_
Member

Откуда:
Сообщений: 598
Блог
а если использовать другой тип
text например.
3 авг 09, 13:01    [7490473]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
Glory
Member

Откуда:
Сообщений: 104760
-=FlinT=-
Тем не менее, вышеупомянутый запрос всё равно обрезает полученный xml до 65535-ти символов...
DECLARE @s varchar(MAX)
SET @s = (
   SELECT
     [Tag]             = 1,
     [Parent]          = 0,
     [TR!1!TR!ELEMENT] = SomeFields
   FROM
      SomeTable (NOLOCK)
   FOR XML EXPLICIT
)


DECLARE @s varchar(MAX)
SET @s = (
   SELECT
     [Tag]             = 1,
     [Parent]          = 0,
     [TR!1!TR!ELEMENT] = name
   FROM
      sysobjects
   FOR XML EXPLICIT
)
select len(@s)

--------------------
72713

(1 row(s) affected)
3 авг 09, 13:01    [7490474]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
sherzod_
а если использовать другой тип
text например.

1. Неудобства - нельзя объявить переменную с таким типом
2. Майки вроде как рекомендуют пользовать (n)varchar(MAX) вместо (n)text, от последних уже вроде как отказались в MSSQL 2008, если я не ошибаюсь...

Glory, да, это я погорячился. Получается ограничение не у varchar-a, а в самой Management Studio на выводимые результаты, т.к. если вместо "select len(@s)" сделать "select @s" и полученые результаты скопипастить с блокнот, то будет заметно, что данные слегка обрезаны.
3 авг 09, 13:25    [7490624]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
Glory
Member

Откуда:
Сообщений: 104760
-=FlinT=-

Glory, да, это я погорячился. Получается ограничение не у varchar-a, а в самой Management Studio на выводимые результаты, т.к. если вместо "select len(@s)" сделать "select @s" и полученые результаты скопипастить с блокнот, то будет заметно, что данные слегка обрезаны.

Да, это ограничение Студии
Tools - Options - SQL Results - Results to Grid
3 авг 09, 13:29    [7490648]     Ответить | Цитировать Сообщить модератору
 Re: Формирование HTML-таблицы в t-sql  [new]
-=FlinT=-
Member

Откуда:
Сообщений: 91
Glory
-=FlinT=-

Glory, да, это я погорячился. Получается ограничение не у varchar-a, а в самой Management Studio на выводимые результаты, т.к. если вместо "select len(@s)" сделать "select @s" и полученые результаты скопипастить с блокнот, то будет заметно, что данные слегка обрезаны.

Да, это ограничение Студии
Tools - Options - SQL Results - Results to Grid


Спасибо, буду знать. Кстати, проверил, на OUTPUT тоже нет никаких ограничений.
Одно непонятно, почему "results to file" не может отработать как положено, уж в этом-то случае зачем что-то ограничивать.. ну да ладно.
3 авг 09, 13:43    [7490756]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить