Sql server 将表值函数的多个结果连接到一个表中
假设SqlServer 2008数据库中存在这样的表:Sql server 将表值函数的多个结果连接到一个表中,sql-server,database,sql-server-2008,Sql Server,Database,Sql Server 2008,假设SqlServer 2008数据库中存在这样的表: CREATE TABLE [dbo].[Test] ( [TableId] [int] IDENTITY(1,1) NOT> NULL, [Data] [xml] NOT NULL ) 我还有这样的表值函数来解析表中的列数据: ALTER FUNCTION [dbo].[fnParseTable] (@header XML) RETURNS @parsedTable TABLE ( [Type]
CREATE TABLE [dbo].[Test] (
[TableId] [int] IDENTITY(1,1) NOT> NULL,
[Data] [xml] NOT NULL
)
我还有这样的表值函数来解析表中的列数据:
ALTER FUNCTION [dbo].[fnParseTable] (@header XML)
RETURNS @parsedTable TABLE (
[Type] NVARCHAR(50),
[Value] NVARCHAR(50)
)
AS BEGIN
--parse xml here
RETURN
END
我可以为表的每一列连接此函数的所有结果吗
我需要这样的东西:
SELECT UNION fnParseTable(Data) FROM dbo.Test
另外,我知道我可以使用游标来完成,但我想确保没有任何更简单的解决方案您不需要表值函数,请使用 查询执行XPath表达式,而数据从结果XML节点提取值 更新
你的答案似乎是解决你问题的适当办法 但是逐字回答这个问题:是的,有一种方法可以在SQLServer2005+中使用CLR创建合适的聚合函数 但不可否认,这有点复杂 你必须编译c代码,你可以在 我成功地运行了这个示例,但我更喜欢在合适的时候使用orangepips的xpath解决方案,因为它只是T-SQL,不需要任何代码
sp_configure 'clr enabled',1
reconfigure
从测试中选择数据。查询'/path'。值'[1]','nvarchar100'作为类型。此选择的结果如下:row1Data1row1Data2row1Data3 row1Data2row2Data2row2Data3 Row1Data3 Row3Data2Row3Data3因此,它只是将值串联在字符串中。如果为行和所需的输出提供示例XML,您能否给出更好的答案。此站点不允许在帖子中使用XML。所以,我创建了谷歌在线文档,这里是我期望的结果:。顺便说一句,我希望你有谷歌帐号。。。。我已经完成了这项任务。我只是用光标。但如果你能给我一个优雅的解决方案,我将非常感激。谢谢。但是这个解决方案对我来说太难看了。它甚至比实现游标更复杂
DECLARE @testTable TABLE(
XmlData XML
)
INSERT INTO @testTable (XmlData)
VALUES ('<row><node><key>key11</key><value>value11</value></node><node><key>key12</key><value>value12</value></node></row>')
INSERT INTO @testTable (XmlData)
VALUES ('<row><node><key>key21</key><value>value21</value></node><node><key>key22</key><value>value22</value></node></row>')
INSERT INTO @testTable (XmlData)
VALUES ('<row><node><key>key31</key><value>value31</value></node><node><key>key32</key><value>value32</value></node></row>')
SELECT
nref.value('key[1]', 'nvarchar(50)') AS [key],
nref.value('value[1]', 'nvarchar(50)') AS value
FROM @testTable CROSS APPLY XmlData.nodes('//node') AS R(nref)
key11 value11
key12 value12
key21 value21
key22 value22
key31 value31
key32 value32
sp_configure 'clr enabled',1
reconfigure