我有两个表(使用表变量进行说明,您可以在管理工具中直接运行这些表),它们通过Id列相关联。第一个表中的项目具有一些标准列,而第二个表中的同一记录具有一些扩展参数数据。我将扩展集存储为 xml,因为它在所有方面都是动态的(每个产品不同或添加新值等)。
我能够连接这两个表并展开列列表,如下例所示。但我的查询需要预先定义动态列。我希望这是真正动态的,如果我在 @extended 表中添加了一个新列,它应自动显示为输出列列表中的新列。
基本上,附加列的列表应由该记录的 xml 决定。对于每个id,列名应为xml标记,值应为xml标记的值。
有任何指针吗?(并且它是否能够快速处理每个表中约100,000条记录或更多)
我能够连接这两个表并展开列列表,如下例所示。但我的查询需要预先定义动态列。我希望这是真正动态的,如果我在 @extended 表中添加了一个新列,它应自动显示为输出列列表中的新列。
基本上,附加列的列表应由该记录的 xml 决定。对于每个id,列名应为xml标记,值应为xml标记的值。
有任何指针吗?(并且它是否能够快速处理每个表中约100,000条记录或更多)
declare @standard table
(
Id INT,
Column1 varchar(10),
Column2 varchar(10),
Column3 varchar(10)
)
declare @extended table
(
Id INT,
column1 xml
)
insert into @standard values (1,'11', '12', '13')
insert into @standard values (2,'21', '22', '23')
insert into @extended values (1,'<FieldSet><Field><id>1</id><column4>1x</column4><column5>4x</column5></Field></FieldSet>')
insert into @extended values (2,'<FieldSet><Field><id>2</id><column4>2x</column4><column5>5x</column5></Field></FieldSet>')
select s.column1, s.column2,
(
SELECT Item2.value('(column4)[1]', 'varchar(50)')
FROM
e.column1.nodes('/FieldSet') AS T(Item)
CROSS APPLY e.column1.nodes('/FieldSet/Field') AS T2(Item2)
) column4,
(
SELECT Item2.value('(column5)[1]', 'varchar(50)')
FROM
e.column1.nodes('/FieldSet') AS T(Item)
CROSS APPLY e.column1.nodes('/FieldSet/Field') AS T2(Item2)
) column5
from @extended e
join @standard s on s.Id = e.Id