|
Автор: Забалуев Сергей По роду своей деятельности я занимаюсь администрированием SQL Server 6.5. и баз данных под его управлением. Не скажу, что это меня напрягает, но бывают случаи когда необходимо получить данные из таблиц. В конечном итоге полученный результат я через буфер обмена помещаю в MS Word и предоставляю его на суд пользователя. Сам незнаю где и когда мне попалась на вид процедура sp_makewebtask. Могу предположить, что это 56 выпуск расылки "MS SQL Server - дело тонкое...". Так вот, я заинтересовался и подумал, а почему бы не посмотреть что из себя представляет эта процедура. Скажу одно-она мне понравилась. Более того, она показалась мне удобной. Надеюсь, что мой труд не пропадет даром и пригодится ходя бы одному администратору В наш век полного господства Internet перед организациями
которые готовы заявить о себе встает вопрос о возможности
поместить данные на сервер Internet и сделать их доступными
пользователям в любое время и актуальными в любое время.
Встает вопрос динамического обновления страниц Web так часто
насколько это нужно. Ядро SQL позволяет автоматически
генерировать такие страницы на основании данных находящихся в
таблице базы данных. USE pubs GO EXECUTE sp_makewebtask @outputfile = 'C:\WEB\Test_1.HTM', @query = 'SELECT title, price FROM titles' GO При выполнении этого сценария в каталоге C:\WEB
сформируется HTML-файл на основе данных из указанного запроса,
который можно просмотреть любым Web обозревателем. Кроме этого
замечу, что в параметре @query можно указывать
несколько запросов разделенных пробелом.
Например,@query='SELECT title, price FROM titles SELECT title
FROM titles'. Каждый результат будет разграничен с другим при
помощи HTML тэга <HR>. USE pubs GO EXECUTE sp_makewebtask @outputfile = 'C:\WEB\Test_1.HTM', @query = 'SELECT title, price FROM titles', @resultstitle='Прайс-Лист', @HTMLHeader=2 GO В документе можно увидеть строку последнего обновления страницы. Мы можем управлять ее появлением в документе параметром @lastupdated. Указав в качестве параметра - 0 мы запретим показ даты и времени последнего обновления в сгенерированном документе. По умолчанию принимается значение - 1. USE pubs GO EXECUTE sp_makewebtask @outputfile = 'C:\WEB\Test_1.HTM', @query = 'SELECT title, price FROM titles', @resultstitle='Заголовок документа', @HTMLHeader=2, @lastupdated=0 GO
Примечание. Хотя я за то, чтобы в сгенерированной Web-странице была строка, которая показывала бы дату последнего обновления. Следующие параметры служат для сообщения входной
информации, позволяющей получить доступ ко всем таблицам и
базам, данные которой должны быть использованы для заполнения
страниц. Параметром @dbname определяется рабочая база.
Параметром @username определяется пользователь от
имени, которого выполняется запрос. USE pubs GO EXECUTE sp_makewebtask @outputfile = 'C:\WEB\Test_1.HTM', @query = 'SELECT title, price FROM titles', @webpagetitle='Практическое применение sp_makewebtask', @resultstitle='Заголовок документа', @HTMLHeader=2, @URL = 'http://www.microsoft.com', @reftext = 'Microsoft Home Page', GO На основе вышесказанного, @reftext это то, что
отображается на странице - указатель ссылки, а @URL это
адресная часть ссылки. Вторая пара параметров применяется для
вывода ссылок на основе SQL-запроса, т.е. указатель и адресная
часть ссылки берется из таблицы. В конструкции SELECT при
указании полей имейте ввиду, что практически найдут применение
только первые два поля. Второе указанное поле берется как
указатель ссылки, а первое как адресная
часть. @url_query='SELECT price,title FROM titles' Параметр @table_urls позволяет разрешить (1) или запретить (0) включать в документ ссылки из @url_query.
Замечание. Если @table_urls = 1, то определение параметра @url_query ОБЯЗАТЕЛЬНО. Следующие параметры относятся к установкам интервалов
обновления страницы. К ним относятся: @whentype,
@targetdate, @targettime, @dayflags, @numunits,
@unittype. Таблица 1.
Таблица 2.
Параметром @targetdate мы определяем дату когда страница должна быть создана, если параметр не указан, то берется текущая дата. Параметр @targettime определяет время когда должно быть создана страница (по умолчанию 12 часов дня). Формат - HHMMSS. @dayflags определяет день недели, чтобы обновить(модифицировать) HTML документ. Параметр может принимать одно из значений : Таблица 3.
Кроме этого можно также указывать несколько дней в неделе, в которые необходимо обновить страницу. Для этого необходимо в качестве параметра для @targetdate указать сумму значений всех дней, в которые необходимо обновить страницу. Например, если необходимо обновить страницу в понедельник (2) и четверг (16), то укажем - 18, так как 2+16=18. @numunits определяет как часто обновлять HTML-документ. Numunits используется только, когда @whentype 4 (периодический) или 8 (сразу и периодически после). Например, если whentype = 4, numunits = 6, и unittype = 1 (часы), указанный HTML документ модифицировать каждые шесть часов. Numunits по умолчанию принимает значение = 1. @unittype определяет, как часто HTML-документ должен быть модифицирован. Используется только, когда @whentype = 4 (периодический), или @whentype = 8 (сразу и позже). Параметр может принимать одно из значений из таблицы 4: Таблица 4.
На этом я закончил описание параметров которые могут нам пригодиться при указании частоты перестроения страницы. Рассмотрим следующие параметры не менее полезные. В параметре @procname можно явно указать имя процедуры или Web-задания. Если параметр не определен, то значение будет сгенерированно на основании Web_YYMMDDHHMMSS+<spid>. Если Вы определяете имя самостоятельно, то помните, что оно должно быть уникальным в пределах текущей базы данных. Параметр @maketask определяет, должна ли быть создана задача, чтобы выполнить сгенерированную хранимую процедуру, которая генерирует HTML документ. Параметр может принимать одно из значений из таблицы 5: Таблица 5.
Следующие параметры я отношу к "визуально-оформительским". К ним относятся: @bold, @italic, @fixedfont, @colheaders, @rowcnt. Рассмотрим подробнее. Параметры @bold и @italic позволяют нам указать тип шрифта при выводе результирующего запроса. Он применяется ко всему документу и может принимать два значения: 0/1. По умолчанию = 0.
Замечание. Заголовки столбцов в любом случае = bold. Параметр @fixedfont позволяет определить вид шрифта
на странице. Используется текущий (1) или пропорциональный
шрифт (0). По умолчанию = 1. "%n% FILE=output_filename TPLT=template_filename URL=url_link_name..." Где n, является номером столбца в списке результата, соответствующему текстовому полю, и n+1 - текст гиперсвязи URL к отдельным данным полей типа ntext или image в HTML файл.
Замечание. Не допускайте наличия пробела перед или после знака (=) и не помещайте имена файлов в кавычки ('). Имена выходных файлов формируются подобным образом как при
singlerow=1. Определение @output_filename требуется, но
@template_filename и @url_link_name можно
опустить. FILE содержит полный путь к расположению выходного
файла. {TABLE=name[COLUMN=name]}[,...] Имя таблицы является обязательным, а список полей -
необязательным. При @whentype = 10 будут созданы в указанной
таблице триггеры (INSERT, DELETE, UPDATE) на выполнение
Web-задания. Если при этом триггеры уже присутствуют, то в
конец кода триггера будет добавлен вызов процедуры
sp_runwebtask. При условии, что при создании триггера не был
применен WITH ENCRYPTION. В противном случае выполнение
sp_makewebtask будет невозможным.
Замечание. Для получении информации о списке кодовых страниц и наборов символов, поддержанных sp_makewebtask можно воспользоваться процедурой sp_enumcodepages Часть результата работы этой процедуры Вы видите ниже. Все вышеописанные параметры, конечно позволяют получить
результат запроса в виде НТML - документа. Но они скорее всего
пригодны для "внутреннего" пользования. Там где в первую
очередь смотрят не на внешний вид страницы, а на
достоверность, оперативность данных. Попробуйте
поэкспериментировать с процедурой и ответьте на вопрос : А
сможет ли привлечь Ваше внимание эта страница в Internet?
Думаю, что нет. В сгенерированной страницы мы не увидим ни
логотипа компании, ни рекламных баннеров (а они иногда нужны),
ни фона и еще много чего, что позволяет нам язык разметки
гипертекста (HTML). Все это было бы так печально на самом деле
если бы не последний параметр, который я приберег на последок,
@templatefile. Параметр может содержать путь и имя к файлу
шаблона, который содержит характеристики форматирования HTML
документа. (HTML -файл с тэгами форматирования). [Shablon.tpl] </HTML%> </HEAD%> </TITLE%>sp_makewebtask <//TITLE%> <//HEAD%> </BODY BACKGROUND=Back08.bmp%> <//BODY%><//HTML%> Теперь выполним следующий запрос: USE pubs GO EXECUTE sp_makewebtask @outputfile = 'C:\WEB\Test_1.HTM', @query = 'SELECT title, price FROM titles', @templatefile=' C:\WEB\Shablon.tpl' GO Который вернет ошибку : Server: Msg 16826, Level 11, State 1, Line -1074284106 SQL Web Assistant: Could not find the specified marker for data insertion in the template file. Данное сообщение ожидаемо, так как в файле шаблона
форматирования обязательно наличие метки
</%insert_data_here%%> которая определяет позицию
в HTML-документе, в которую будет добавлены результаты
запроса. Добавим маркер в HTML-файл и снова выполним запрос.
Сформируется HTML-документ в котором в качестве фона будет
фоновый рисунок. Привлекательность страницы резко возросла,
неправда ли? Таблица 6.
Это не страшно, так как синтаксис языка HTML дает нам много
возможностей по созданию оригинального, привлекательного
шаблона для нашего запроса который мы хотим видеть как
Web-страницу. [Shablon.tpl] <HTML%> <HEAD%> <TITLE%>sp_makewebtask</TITLE%> </HEAD%> -- Фоновый рисунок <BODY BACKGROUND=Back08.bmp%> -- Логотип <IMG SRC=Logo.gif ALIGN=LEFT%> -- Выравним по центру <CENTER%> -- Таблица <TABLE BORDER=2 BGCOLOR=Beige%> <TR BGCOLOR=Azure%> <TH%>Title</TH%> <TH%><B%>Price</B%></TH%> </TR%> <TR%> <TD%> <FONT COLOR=BLUE%> <%insert_data_here%%> </FONT%></TD%> <TD ALIGN=RIGHT%><FONT COLOR=RED%> <%insert_data_here%%></FONT%></TD%></TR%> </TABLE%> </CENTER%> </BODY></HTML> Результат будет неудовлетворять одним. Будет создана
таблица содержащая 2 столбца, а результат SELECTа будет
помещен в первый столбец ('Title'). Почему и что делать? В
этом нам помогут последние два маркера. Это :
<%begindetail%> и <%enddetail%>. Они
предназначены для более точного размещения данных. Ими
необходимо ограничить HTML тэги <TR>, </TR>,
<TD>, и </TD>. <TABLE> -- определим строку <TR> -- первая ячейка <TD> -- здесь будут данные поля 'title' нашего SELECT <%insert_data_here%> </TD> -- вторая ячейка <TD> -- здесь будут данные поля 'price' нашего SELECT <%insert_data_here%> </TD> </TR> </TABLE> Это были подготовительные действия, и теперь мы дадим команду вставлять данные каждого поля в свою ячейку. Для этого добавим маркеры <%begindetail%> и <%enddetail%> так как я говорил выше. То есть мы ограничим ими тэг </TR> и </TR>. Теперь данные размещены там где мы и предполагали их увидеть. Повторю, Вы имеете полную свободу действий в форматировании Web-страницы использую все доступные возможности языка разметки гипертекста. <TABLE> <%begindetail%> -- определим строку <TR> -- первая ячейка <TD> -- здесь будут данные поля 'title' нашего SELECT <%insert_data_here%> <TD> -- вторая ячейка </TD> -- здесь будут данные поля 'price' нашего SELECT <%insert_data_here%> <TD> <TR> <%enddetail%> <TABLE> |
Автор: Забалуев Сергей 2001г. |