2009-02-27 87 views
0

我返回查询的xml结果。用于Xml路径的SQL Server

给定两个表:

**Foo** 
FooId int 
FooName varchar(10) 

**Bar** 
BarId int 
FooId int (FK) 
BarName varchar(10) 

我创造这样一个select语句:

SELECT 
    FooId, 
    FooName, 
    (
    SELECT 
     BarId, 
     FooId, 
     BarName 
    FROM 
     Bar 
    WHERE 
     Bar.FooId = Foo.FooId 
     AND Bar.BarName = 'SomeBar' 
    FOR XML PATH('Bar'), TYPE 
) 
FROM 
    Foo 
WHERE 
    Foo.FooName = 'SomeFoo' 
    AND Foo.FooId IN 
    (
    SELECT 
     Bar.FooId 
    FROM 
     Bar 
    WHERE 
     Bar.BarName = 'SomeBar' 
) 
FOR XML PATH('Foo'), TYPE 

这个工程,我希望它并返回正确的结果。我意识到开发它时,我需要复制子选择和where子句中的嵌套选择中的过滤子句,以获得正确的结果。

我想确保没有更好的方法来做到这一点。一位同事提到使用别名来删除重复的子句,但我不确定这将如何完成任何事情。

这是必要的,还是有更好的方法?

回答

2

假设您只想返回带有条形图的Foos,并且需要保留XML中的条形图节点(即连接不起作用,因为它会使您的XML变平),所以无法简化这很多。您当然可以将Bar查询放入一个公用表格表达式中,但如果您这样做,整个事情实际上会变得更长。