Произвольная таблица SQL Server к таблице XHTML

Я видел на веб-сайте, парень возвратил свою информацию о таблице базы данных как таблицу HTML. Это было круто. Его код следующие:

select 2 [@cellpadding]
      ,2 [@cellspacing]
      ,1 [@border]
--This returns the header
        ,(select th
            from (select 'Database Table' th
               union all
                  select 'Entity Count'
               union all
                  select 'Total Rows') d --name of this alias is irrelevant but you have to have one
          for xml path(''),type) tr --tr here defines that the header row will be a tr element

--This returns the rows in the table
        ,(select (select dbtable [*]  for xml path('td'),type),
                 (select entities [*] for xml path('td'),type),
                 (select rows [*] for xml path('td'),type)
            from (--We have to use a derived table because we are grouping
                  select dbtable  = object_name( object_id ),
                         entities = count( distinct name ),
                         rows     = count( * )
                    from sys.columns
                group by object_name( object_id )) data
                  --name of this alias is irrelevant but you have to have one
           for xml path ('tr'),type) --path('tr') turns each row into a tr element
 for xml path('table'), type

Я хотел бы видеть, возможно ли возвратить таблицу HTML из одной произвольной таблицы SQL Server. Я знаю, что у людей есть разные мнения на том, существует ли лучший способ сделать это, которое не является однако точкой этого вопроса. Я плохо знаком с SQL, и я просто пытаюсь изучить свой путь вокруг этого. Мой код следующие.

select dataid as [@id], *
from   table_1
for    xml path('tr'), root('table')

Это возвращает что-то как:

datadatadatadata

Я предпочел бы вывод как:

data data
data data

Действительно ли это выполнимо в Транзакции SQL Server? Если так, как это было бы сделано?

1
задан kzh 8 July 2010 в 02:46
поделиться

3 ответа

Это некрасиво, но я разобрался ...

declare @tds nvarchar(max),
        @sql nvarchar(max),
        @table char(10)
set @sql = 'select(select td from( '
set @table = 'table_2'
set @tds = ''

select @tds = @tds + 'union all select cast([' + Column_name + '] as nvarchar(max)) ' + char(13) + char(10)
FROM    INFORMATION_SCHEMA.Columns
WHERE   TABLE_NAME = @table

set @tds = stuff(@tds, 1, 10, '')
set @tds = stuff(@tds, charindex('))',@tds, 1), 2, ')) td ')

set @sql = @sql + @tds

SET @sql = @sql + ')something_here for xml path(''''), type) from table_2 '
SET     @sql = @sql + ' FOR XML PATH(''tr''), ROOT(''tbody''), TYPE'

EXEC SP_EXECUTESQL @sql
0
ответ дан 2 September 2019 в 23:13
поделиться

возможно, это хорошее использование XSLT

0
ответ дан 2 September 2019 в 23:13
поделиться

Я действительно не уверен, что это хорошая вещь. Принцип разделения задач (или "инкапсуляции") подразумевает, что инженер базы данных должен заниматься данными, а не представлением; то есть SQL-запрос должен возвращать информацию, которая затем форматируется для отображения отдельным представлением. Возвращение HTML из SQL-процедуры перекладывает больше работы на сервер базы данных, требует изменения базы данных, когда появляется новая версия HTML или вы хотите новый формат таблицы, запутывает DBA...

Я не думаю, что это хороший способ ведения бизнеса".

2
ответ дан 2 September 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: