PASS Македонија
PASS Македонија
Главна | Профил | Регистрирање | Активна тема | Членови | Пребарување | FAQ
Корисник:
Лозинка:
Сними ја лозинката
 Сите форуми
 Microsoft
 Microsoft SQL Server 2000/2005/2008/2008R2/2012
 Креирање на XML со повеќе нивоа преку T-SQL
 Нова Тема  Одговори на Тема
 Погодно за печатење
Автор Предходна Тема Тема Наредна Тема  

Alex
Модератор

282 Пораки

Posted - 23/01/2014 :  14:01:05  Прикажи го профилот  Испрати Alex ICQ Порака  Одговори со Цитат
Со следната скрипта преку користење на CTE и UDF може да се добие добро структуриран XML документ со неограничен број на нивоа во длабочина.

DROP TABLE fixrekurzija -- dokolku postoi
GO
CREATE TABLE [dbo].[Meni](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](500) NOT NULL,
[PID] [int] NULL,
[LNG] [int] NULL,
[Visibility] [bit] NULL,
[Locked] [bit] NULL,
[OrderMeni] [int] NULL,
[Description] [nvarchar](4000) NULL,
[Keywords] [nvarchar](4000) NULL,
[Rewrite] [nvarchar](4000) NULL,
CONSTRAINT [PK_Meni] PRIMARY KEY CLUSTERED
(
-- od ovaa tabela ke se vlecat podatoci i konvertiraat vo XML
GO
-- CTE query
WITH Rekurzija (PID, ID, Name,Rewrite, Level)
AS
(
SELECT e.PID, e.ID, e.Name,e.Rewrite, 0 AS Level
FROM dbo.meni e
WHERE e.PID IS NULL
UNION ALL
SELECT e.PID, e.ID, e.Name,e.rewrite,Level + 1
FROM dbo.meni AS e
INNER JOIN rekurzija AS d
ON e.PID = d.ID
)
SELECT PID, ID, Name,Rewrite, Level
INTO fixrekurzija
FROM rekurzija

-- UDF za rekurziven XML

CREATE function SelectChild(@key as int)
returns xml
begin
return (
select
ID as "@id",
name as "@Title",
Rewrite as "@url",
dbo.SelectChild(ID)
from fixrekurzija
where PID = @key
for xml path('link'), type
)
end

SELECT
Id AS "@id",
Name as "@Title",
rewrite as "@url",
dbo.SelectChild(ID)
FROM fixrekurzija
WHERE PId is null
FOR XML PATH ('link'),root('meni')


ALex
  Предходна Тема Тема Наредна Тема  
 Нова Тема  Одговори на Тема
 Погодно за печатење
Прејди на:
PASS Македонија © PASS Македонија На почеток од траницата
Powered By: PASS Македонија 3.4.03