Cruel SQL

Фильтр по тегу: xml


Транспонирование произвольного ряда на T-SQL

Отнюдь не всем и не часто, но может пригодиться. Если нужно представить одну строку (например, из какой-нибудь настроечной таблицы) в виде набора строк "имя поля - значение", то можно, в частности, поступить вот так.

; with	CTE_SingleRowXML as (
			select	x = (select * from dbo.[ВашаТаблица] for xml path(''), elements xsinil, type)
		)
select	ColName		= v.value('local-name(.)', 'sysname')
	,	Value		= v.value('text()[1]', 'nvarchar(max)')
from	CTE_SingleRowXML as srx
		cross apply srx.x.nodes('*') as f(v);


При добавлении/удалении полей из таблицы такой скрипт переписывать (в отличие от скрипта с использованием штатного unpivot-а) не придётся (тут есть и плюсы, и минусы, поэтому просто назову это особенностью :))
добавлено: 30 мар 13 просмотры: 1229, комментарии: 0