powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XML
4 сообщений из 4, страница 1 из 1
XML
    #32012866
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Литературы конечно уйма и internet и на бумаге. Я уже обчитался. Ну все знаю. Вот только никак понять не могу как же мне запрос к SQL из XML документа сделать??? Кто работал подскажите плиз.
...
Рейтинг: 0 / 0
XML
    #32012882
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если на сервере сделаны все установочные работы (IIS, web, configure SQL XML support on IIS), то я лично делаю так
Пример выборки/поиска данных - задача по данным номеру клиента отобразить данные о его договорах двумя частями, сначала данные клиента, затем данные о каждом договоре. При отсутствии данных - отобразить соответсвующее сообщение.

мой XML


<?xml version ='1.0' encoding='UTF-8'?>
<root xmlns:sql='urn:schemas-microsoft-com:xml-sql' sql:xsl='agreementsearch1.xsl'>
<sql:header>
<sql:param name='CustName'></sql:param>
<sql:param name='CustRegNum'></sql:param>
</sql:header>
<sql:query >
exec sp_agrsearches1 @CustName, @CustRegNum
</sql:query>
</root>


Вместо вызова процедуры exec может стоять и прямой запрос SELECT, главное чтобы с фразой FOR XML + опции(в данном примере я использую AUTO, ELEMENTS) - это для извлечения данных.
Для отображения я использую шаблоны (см.тэг sql:xsl='agreementsearch1.xsl')

мой XSL


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:variable name="backcolor" select="'#FFFFCC'" />

<xsl:template match="a">
<TR><TD align="center">
<TABLE border='1' cellpadding="0" cellspacing="0">
<TR>
<TH>Kliendi nimi</TH>
<TH>IK/Reg.nr</TH>
<TH>Võlg</TH>
<TH>Staatus</TH>
<TH>Seisuga</TH>
</TR>
<TR class="tabelisisu">
<xsl:apply-templates select='cust_name|cust_vat_reg_num|cust_balance|stage_name|last_run'/>
</TR>
</TABLE>
</TD></TR>
<TR class="tabelisisu"><TD align="center">
<TABLE border='1' cellpadding="0" cellspacing="0">
<TR>
<TH>Number</TH>
<TH>Kasutaja nimi</TH>
<TH>Pakett</TH>
<TH>St</TH>
<TH>Sõlm.</TH>
<TH>Lõpet.</TH>
<TH>Põhjus</TH>
<TH>Lisateenused</TH>
</TR>
<xsl:apply-templates select='c'/>
</TABLE>
</TD></TR>

</xsl:template>

<xsl:template match="a/cust_name">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="a/cust_vat_reg_num">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="a/cust_balance">
<TD align="right"><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="a/stage_name">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="a/last_run">
<TD><xsl:apply-templates/></TD>
</xsl:template>





<xsl:template match="c">
<TR class="tabelisisu">
<xsl:apply-templates select='*'/>
</TR>
</xsl:template>


<xsl:template match="c/subr_info_status">
</xsl:template>

<xsl:template match="c/s23_disc_reason">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/s23_subscriber">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/subr_user_name">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/s23_at_code">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/s23_status">
<TD><b>
<xsl:choose>
<xsl:when test=". = 'A'"><font color="#006600"><xsl:value-of select="."/></font> </xsl:when>
<xsl:when test=". = 'P'"><font color="#333333"><xsl:value-of select="."/></font></xsl:when>
<xsl:when test=". = 'L'"><font color="#FF0000"><xsl:value-of select="."/></font></xsl:when>
</xsl:choose>

</b></TD>
</xsl:template>

<xsl:template match="c/subr_agdate">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/subr_sw_off">
<TD><xsl:apply-templates/></TD>
</xsl:template>

<xsl:template match="c/services">
<TD><xsl:apply-templates/></TD>
</xsl:template>


<xsl:template match="/">
<TABLE cellpadding="0" cellspacing="0">
<xsl:apply-templates/>
</TABLE>

</xsl:template>


<xsl:template match="row">
<TR class="tabelisisu">
<TD align="center"><xsl:value-of select = '@error_message' /></TD>
</TR>
</xsl:template>

</xsl:stylesheet>


для запуска XML используется простая HTML страница для ввода пользователем параметров поиска.Данная страница форимирует ссылку вида

'http:// mywebserver / mytemplatedirectory /agreementsearch1.xml?CustRegNum=' +document.agreementsearch_main.custnumber.value+'&outputencoding=UTF-8&contenttype=text/html'

Основной запрос выглядит так


SELECT a.cust_name, a.cust_vat_reg_num, a.cust_balance, COALESCE(b.stage_name, '-') AS stage_name,
COALESCE(CONVERT(varchar(10), CONVERT(datetime, a.last_run, 120), 4), '-') AS last_run,
c.subr_info_status,
CASE WHEN c.subr_info_status = 'A' THEN c.s23_subscriber ELSE 'salastatud' END AS s23_subscriber,
CASE WHEN c.subr_info_status = 'A' THEN CASE WHEN DATALENGTH(RTRIM(LTRIM(c.subr_user_name)))=0 THEN '-' ELSE c.subr_user_name END ELSE 'salastatud' END AS subr_user_name,
CASE WHEN c.subr_info_status = 'A' THEN CASE WHEN (dbo.fn_IsClosedAgr(a.cust_number, c.s23_disc_reason, c.s23_status) = 1) THEN COALESCE(dbo.fn_Packet4Agreement(a.cust_number, c.s23_subscriber, c.subr_sw_off, 1), '-' )
ELSE COALESCE(dbo.fn_Packet4Agreement(a.cust_number, c.s23_subscriber, DATEADD(yy, CASE WHEN c.s23_status='00' THEN -100 ELSE 0 END, GETDATE()), 1), '-') END ELSE 'salastatud' END AS s23_at_code ,
CASE WHEN c.s23_status IN('10', '50') THEN 'A' WHEN (dbo.fn_IsClosedAgr(a.cust_number, c.s23_disc_reason, c.s23_status) = 1) THEN 'L' ELSE 'P' END AS s23_status,
CONVERT(varchar(10), CONVERT(datetime, c.subr_agdate, 120), 4) AS subr_agdate,
COALESCE(CONVERT(varchar(10), CONVERT(datetime, c.subr_sw_off, 120), 4), '-') AS subr_sw_off,
CASE WHEN DATALENGTH(RTRIM(LTRIM(c.s23_disc_reason)))=0 THEN '-' ELSE c.s23_disc_reason END AS s23_disc_reason,
CASE WHEN c.subr_info_status = 'A' THEN COALESCE(CASE WHEN (dbo.fn_IsClosedAgr(a.cust_number, c.s23_disc_reason, c.s23_status) = 1) THEN dbo.fn_Services4Customer(a.cust_number, c.s23_subscriber, c.subr_sw_off)
ELSE dbo.fn_Services4Customer(a.cust_number, c.s23_subscriber, GETDATE()) END, '-') ELSE 'salastatud' END AS services
FROM dbo.customers a
LEFT OUTER JOIN dbo.customerstages b ON b.stage = a.stage
LEFT OUTER JOIN dbo.liitumised c ON c.cust_number = a.cust_number
LEFT OUTER JOIN dbo.disconnectionreasons d ON d.s23_disc_reason = c.s23_disc_reason
WHERE (a.cust_vat_reg_num = @customer_regnum)
ORDER BY cust_name FOR XML AUTO, ELEMENTS




Не знаю помог ли я вам или наоборот еще больше запутал - данные тексты появились в результатет многочисленных эксперементов, так что может оказаться, что они и неоптимальны.
...
Рейтинг: 0 / 0
XML
    #32012955
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
XML
    #32013047
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/docs/AccessingData/XML/NET/index.shtml
Может тоже сгодится...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]