【发布时间】:2015-04-09 14:54:35
【问题描述】:
我的 SQL Server 2008 R2 数据库中生成了以下 XML
<XMLData>
...
<Type>1</Type>
...
</XMLData>
我需要的最终输出是单一组合如下:
<AllMyData>
<XMLData>
...
<Type>1</Type>
...
</XMLData>
<XMLData>
...
<Type>2</Type>
...
</XMLData>
...
...
<XMLData>
...
<Type>n</Type>
...
</XMLData>
<AllMyData>
n 在查询运行之前是未知的。
现在我正在使用这种方法:
ALTER FUNCTION [dbo].[fn_GetErrorXML]
(
@DateFrom datetime,
@DateTo datetime,
@ResourceTypeID bigint,
@ServerID int
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @ErrorDescription VARCHAR(MAX)
SET @ErrorDescription = '<root>';
WITH CTE AS
(
SELECT
d.GeneratedOnUtc,
ErrorDescription = cast(d.Data as nvarchar(max))
FROM dbo.AgentData d
INNER JOIN dbo.Agent a ON a.CheckID = d.CheckID
INNER JOIN dbo.Server s ON a.ServerID = s.ID
WHERE d.EventType = 'Result' AND
a.ResourceTypeID & @ResourceTypeID > 0 AND
s.ID = @ServerID AND
d.GeneratedOnUtc between @DateFrom AND @DateTo AND
d.Result = 0
)
SELECT @ErrorDescription = @ErrorDescription + cte.ErrorDescription
FROM CTE
ORDER BY cte.GeneratedOnUtc ASC
RETURN(@ErrorDescription + '</root>')
END
其中d.Data 数据类型为xml not null
但是 XML casts + UDF 太慢而且看起来很丑。
有更好的方法吗?
【问题讨论】:
-
d.Data 是什么类型,结果你想要什么类型?
-
@GiorgiNakeuri
XML或string,不管是哪一个 -
D.Data 的类型是 XMl 还是字符串???如果没有,那你为什么要转换为 nvarchar?
-
@GiorgiNakeuri XML。因为我不知道如何连接 XML。这就是我问这个问题的原因。
标签: sql sql-server xml sql-server-2008-r2 concatenation