Выгрузка в HTML

by Admin 5. февраля 2009 16:24

Достаточно часто на различных форумах появляется вопрос, подобно этому: "...необходимо периодически формировать отчеты по таблицам БД в виде файла html...как реализовать?"

С появлением Reporting Services, задача очень облегчается, но как реализовать эту задачу на T-SQL (без использование и CLR тоже)?

Первый способ-это использование процедур Web Assistant (sp_makewebtask, sp_dropwebtask, sp_runwebtask, sp_enumcodepages).

Наполнять страницу будем результатом запроса

SELECT ID, NAME, XTYPE FROM SYSOBJECTS

Ищем в BOL описание процедур и пробуем построить небольшую html-страничку WebPage.htm на диске С:

EXECUTE sp_makewebtask @outputfile= N'C:WebPage.htm', 
@query=N'SELECT ID, NAME, XTYPE FROM sysobjects', 
@fixedfont=1, @HTMLheader=3, 
@webpagetitle=N'Microsoft SQL Server Web Assistant', 
@resultstitle=N'Query Results', @dbname= 'master'

Запускаем, получаем ошибку:

Msg 15281, Level 16, State 1, Procedure xp_makewebtask, Line 1 SQL Server blocked access to procedure ’sys.xp_makewebtask’ of component ‘Web Assistant Procedures’ because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of ‘Web Assistant Procedures’ by using sp_configure. For more information about enabling ‘Web Assistant Procedures’, see “Surface Area Configuration” in SQL Server Books Online.

Оказывается по умолчанию процедуры помощника Web Assistant отключены, включаем их:

sp_configure 'show advanced options', 1; 
GO RECONFIGURE; 
GO 
sp_configure 'Web Assistant Procedures', 1; 
GO 
RECONFIGURE WITH OVERRIDE 
GO

После этого можно запускать наш скрипт. Если получаем ошибку:

Msg 16805, Level 11, State 1, Procedure sp_makewebtask, Line 131 SQL Web Assistant: Could not execute the SQL statement.

Как решить эту проблему, можно прочитать тут: http://support.microsoft.com/kb/834116/en-us (В краце: проблема возникает, если ваш сервер баз запущен под local Windows NT user).

Как только мы разобрались со всеми проблемами, мы можем сформировать нужный нам файл, вот его пример:

 

А теперь минусы этого способа:

BOL:

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.. Вместо этого следует использовать службы Reporting Services.

(Кстати в 2008ом я уже не смог найти эти процедуры.) Ну и что ещё смущает:"

Для выполнения процедуры sp_makewebtask необходимо быть членом фиксированной серверной роли sysadmin.

Второй способ мне нравится на много больше. Для формирования html будем использовать XML.

SELECT 2 [@cellpadding] ,2 [@cellspacing] ,1 [@border] ,
(SELECT 'ObjectID' [th], null ,'ObjectName' [th], null ,'XTYPE' [th] FOR XML PATH (''), TYPE) tr , 
(SELECT (SELECT id [text()] FOR XML PATH('td'),TYPE), (SELECT name [text()] FOR XML PATH('td'),TYPE), 
(SELECT xtype [text()] FOR XML PATH('td'),TYPE) 
FROM master..sysobjects FOR XML PATH ('tr'),TYPE) FOR XML PATH ('table'), TYPE

Полученную строку XML сохраняем в файл WebPage2.htm и смотрим результат:

 

 

3ий вариант на Power Shell :

 

# Определяем запрос к Базе Данных
$Query="SELECT ID, NAME, XTYPE FROM sysobjects"

# Создаём соединение
$SQLConnection = new-object System.Data.SqlClient.SqlConnection("Data Source=(local);Integrated Security=SSPI")

# Создаем SQL команду, используя наш запрос и созданное соединение
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand($Query, $SQLConnection)

# Открываем соединение
$SQLConnection.Open()

# Выполняем….
$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($SQLCommand)
$DataSet = New-Object System.Data.DataSet;
$SQLAdapter.Fill($DataSet);
$DataTable=New-Object System.Data.DataTable
$DataTable=$DataSet.Tables[0]

#Вывод в HTML
$DataTable.DefaultView | ConvertTo-Html | Out-File "C:\WebPage3.htm"

# Закрываем соединение
$SQLConnection.Close()

Tags:

PowerShell | SQL Server

Комментарии (2) -

ram9
ram9 Russia
18.10.2010 12:14:10 #

Вот бы еще вытащить в XML-файл из бинарного поля SQL твблицы, где записан этот файл

Reply

Alexey Knyazev
Alexey Knyazev Russia
20.10.2010 0:18:06 #

Посмотрите это: http://www.sql.ru/faq/faq_topic.aspx?fid=398

Reply

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading