powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оформление результата запроса в виде таблицы при отправке письма
6 сообщений из 6, страница 1 из 1
Оформление результата запроса в виде таблицы при отправке письма
    #39641341
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Как сделать чтобы при отправке письма через sp_send_dbmail
результат запроса из переменной @query в теле письма был оформлен в виде таблицы с рамками?




Сейчас письмо имеет такой вид:

Точка
Статус
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------
aa89
1
aa90
3
aa88
3
aa23
7


Нужно чтобы в теле письма отображалось:

Точка Статус
aa89 1
aa90 3
aa88 3
aa23 7

+ рамки
...
Рейтинг: 0 / 0
Оформление результата запроса в виде таблицы при отправке письма
    #39641346
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Оформление результата запроса в виде таблицы при отправке письма
    #39641348
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

Так и сделайте из переменной таблицу, а не строку (как видимо сейчас) и все будет нормально.
...
Рейтинг: 0 / 0
Оформление результата запроса в виде таблицы при отправке письма
    #39641384
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
declare @query nvarchar(1000)='select top 20 * from master..spt_values'
declare @xml xml
declare @HTML nvarchar(max) 
declare @StartTime datetime=getdate()

--
set @query=N'set @xml=('+@query+N' for xml raw, elements xsinil, type, xmlschema)'

exec sp_executesql @query, N'@xml xml out', @xml=@xml out 

set @HTML =
		N'<html>' +
		N'<head>'+
		N'  <style type="text/css">'+
		N'		th {background-color: #03A2B0;}'+
		N'		table {border-collapse: collapse; padding: 5px;}'+
		N'		table, th, td {border: 1px solid black;}'+
		N'		.tr_class0 {background-color: #CDF3F7;}'+
		N'  </style>'+
		N'</head>'+
		N'<body>'	+
		N'<h3>Прувэт !!1</h3>'+
		N'<table border="1">'+[dbo].[fnRawXMLToHTML](@xml,null)+N'</table>'+
		N'< br /><font size="2" color="#778899" face="Arial"><i>Покеда !</i></font>' +
		N'< br />' +
		N'<font size="1" color="#778899" face="Arial"><i>Время формирования: '+cast(datediff(ms, @StartTime, getdate()) as varchar)+' ms</i></font>' +
		N'</body>' +
		N'</html>';

--print @HTML

exec msdb.dbo.sp_send_dbmail 
			@profile_name='My profile name'
			,@recipients='billy@microsoft.com'
			,@subject='My subject'
			,@body=@HTML
			,@body_format='HTML'



<br />в выделенных строках поправить нужно, а то форум их "съедает" если правильно написать ...

fnRawXMLToHTML
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
create FUNCTION [dbo].[fnRawXMLToHTML](
						 @xml			xml					--	xml-данные в формате raw
						,@th_bgcolor	varchar(20)=null	--	Цвет строки с подписями
)
RETURNS nvarchar(max)
AS
BEGIN
	declare @html nvarchar(max)
	declare @th xml, @td xml
	declare @MoneyFormat nvarchar(20)='###'+char(160)+'###'+char(160)+'##0.00'

	declare @xmlschema table (FieldName nvarchar(100), FieldType nvarchar(100))

	--	Если задана схема
	insert into @xmlschema 
		(FieldName, FieldType)
	select 
		x.z.value('@name', 'varchar(100)') as q 
		,isnull(x.z.value('@type', 'nvarchar(100)'),x1.z1.value('@base', 'nvarchar(100)')) as q1 
	from 
	@xml.nodes('*/*/*/*/*:element') as x(z) 
	outer apply x.z.nodes('*:simpleType/*:restriction') as x1(z1)

	--	Подписи
	set @th=
			(select 
				@th_bgcolor as 'tr/@bgcolor' 
				,(select replace(t.c.value('local-name(.)', 'nvarchar(100)'),'_',' ')  
				  from @xml.nodes('/*:row[1]/*') as t(c) 
				  where t.c.value('local-name(.)', 'nvarchar(100)')<>'trclass'
				  for xml path('th'), type) as tr 
			for xml path(''))

	--	Данные
	set @td=
			(select 	

				case when a.OneRow.value('./*:trclass[1]/text()[1]', 'int') is null 
					then case when row_number()over(order by (select 1)) % 2=1 then 'tr_class1' else 'tr_class0' end
					else 'tr_class'+cast(a.OneRow.value('./*:trclass[1]/text()[1]', 'int') as varchar)
				end   as 'tr/@class'

				,(select 
						  case 
								when a.FieldType in ('sqltypes:int', 'sqltypes:numeric', 'sqltypes:smallint', 'sqltypes:tinyint', 'sqltypes:money') then 'right'
								when a.FieldType in ('sqltypes:datetime') then 'center'
								else null 
						  end	as '@align'
						, 
						  case 
								when a.FieldType in ('sqltypes:money')						
									then Format(t1.c.value('./text()[1]', 'money'), @MoneyFormat) 
								when a.FieldType in ('sqltypes:datetime')
									then Format(t1.c.value('./text()[1]', 'datetime'), 'dd\.MM\.yyyy') 
								else t1.c.value('./text()[1]', 'nvarchar(1000)')  
						  end
						  	
				from a.OneRow.nodes('/*') as t1(c) 

				outer apply (
								select 
									x.FieldType
								from	@xmlschema x 	
								where  x.FieldName=t1.c.value('local-name(.)', 'nvarchar(100)') 
							) a

				where t1.c.value('local-name(.)', 'nvarchar(100)')<>'trclass'

				for xml path('td'), elements, type) as tr

			from
				(select
					 t.c.query('./*') as OneRow
				from @xml.nodes('/*:row') as t(c) ) a
				
			for xml path(''))

	--	"Склейка" результату (char(10) ==> < br />)
	set @html = isnull(cast(@th as nvarchar(max)), '')+isnull(replace(cast(@td as nvarchar(max)),char(10),'< br />'), '')

	--
    return @html   
END

...
Рейтинг: 0 / 0
Оформление результата запроса в виде таблицы при отправке письма
    #39641415
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо
...
Рейтинг: 0 / 0
Оформление результата запроса в виде таблицы при отправке письма
    #39732145
BSCHECK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Действительно, классная функция и пояснение.
Подскажите, а что делать с русскими названиями полей, если нужны в отчете и датами?
А то в письме приходят даты в виде: вместо 20180131, к примеру: x00320180131
Погуглил - не нашел, что подраузмевается под кодом : x003 и как с этим бороться.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оформление результата запроса в виде таблицы при отправке письма
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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