Tsql XML路径与更多连接
我需要一个列出订单和相关数据的网格。(纯粹虚构的例子) 为简单起见:Tsql XML路径与更多连接,tsql,orm,resultset,for-xml-path,Tsql,Orm,Resultset,For Xml Path,我需要一个列出订单和相关数据的网格。(纯粹虚构的例子) 为简单起见: OrderID OrderName OrderDate Collection Parts Collection Destinations Collection SuppliersInvolved 网格应显示每个订单,还应显示每个集合的文本描述, 例如: 现在,这个网格可能有多达200行 这个问题是,我们使用的定制ORM在将多PK结果集映射到唯一对象时存在一些主要的缓慢性问题 例如 即使结果集中涉及1个集合,它也存在此问题。查
OrderID
OrderName
OrderDate
Collection Parts
Collection Destinations
Collection SuppliersInvolved
网格应显示每个订单,还应显示每个集合的文本描述,
例如:
现在,这个网格可能有多达200行
这个问题是,我们使用的定制ORM在将多PK结果集映射到唯一对象时存在一些主要的缓慢性问题
例如
即使结果集中涉及1个集合,它也存在此问题。查询本身执行得非常好和快,映射才是问题所在
因此,我只有两个选择(据我所知):
谢谢。我认为映射不会成为问题,因为您可以继续使用自定义属性,然后映射它。然而,这里有一个解决这个问题的foxxml路径解决方案
Declare @t Table(OrderId Int,OrderName Varchar(10),OrderDate DateTime,Part Varchar(2),Destination Varchar(10),Supplier Varchar(10))
Insert Into @t Values
(2,'davo','5/21/12','A','London','SuppA'),
(2,'davo','5/21/12','B','London','SuppB'),
(2,'davo','5/21/12','C','Paris','SuppC')
Select
OrderId
,OrderName
,OrderDate
,Parts = Stuff( (Select Distinct ',' +Cast(Part As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
,Destinations = Stuff( (Select Distinct ',' +Cast(Destination As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
,SupplierInvolved = Stuff( (Select Distinct ',' +Cast(Supplier As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
From @t t1
Group By t1.OrderId,t1.OrderName,t1.OrderDate
结果是
在选项1中,编写一个存储过程来获取记录集(使用订单、零件、供应商等表之间的联接),然后您可以使用自定义属性再次映射这些记录集。现在,如果您还想在演示层执行自定义格式设置 嗨,你是说自定义属性吗?我已经有了使用For XML Path的查询。我注意到,对于实时数据,查询平均时间为3-5秒,跨越大约2000条记录。这对我来说太慢了。如何使用自定义属性进行映射?
OrderID OrderName OrderDate Part Destination Supplier
2 davo 21/5/12 A London SuppA
2 davo 21/5/12 B London SuppA
2 davo 21/5/12 A London SuppB
2 davo 21/5/12 B London SuppB
Declare @t Table(OrderId Int,OrderName Varchar(10),OrderDate DateTime,Part Varchar(2),Destination Varchar(10),Supplier Varchar(10))
Insert Into @t Values
(2,'davo','5/21/12','A','London','SuppA'),
(2,'davo','5/21/12','B','London','SuppB'),
(2,'davo','5/21/12','C','Paris','SuppC')
Select
OrderId
,OrderName
,OrderDate
,Parts = Stuff( (Select Distinct ',' +Cast(Part As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
,Destinations = Stuff( (Select Distinct ',' +Cast(Destination As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
,SupplierInvolved = Stuff( (Select Distinct ',' +Cast(Supplier As Varchar(max))
From @t t2 where t1.OrderId = t2.OrderId
For Xml Path('')
),1,1,'')
From @t t1
Group By t1.OrderId,t1.OrderName,t1.OrderDate