SQL XML,是否有一种技术可以用xml格式获取一些列?

时间:2013-01-10 05:54:35

标签: sql sql-server xml

我想将多个表中的数据存储到一个表中

table A (
p, q,
PRIMARY KEY (p,q)
)

table B (
p, m, n,
PRIMARY KEY (p,m,n)
)

table output(
p,
xml
)

输出应该像

表A

 -------------------------------
|    p      |        xml        |
---------------------------------
|value of p | <q>some value</q> |
 -------------------------------

表B

 -----------------------------------------------
|    p      |        xml                        |
------------------------------------------------
|value of p | <m>some value</m><n>some data</n> |
 -----------------------------------------------

这可以通过此查询来实现

SELECT * 
FROM Students s
CROSS APPLY
(
    SELECT 
        (
            SELECT * 
            FROM Students t
            WHERE t.DisplayName = s.DisplayName
            FOR XML RAW
        ) x1
)x

但我想让SQL足够通用,以便给定任何表名,我们可以得到上面的输出。

内部联接的问题是,查询将不是通用的

2 个答案:

答案 0 :(得分:1)

要从一个表中获得您想要的结果,您可以使用以下内容:

select T.Table1ID,
       (
         select T.*
         for xml raw, type
       ) as x1
from Table1 as T

要将相同的模式应用于另一个表,您需要更改表名和键列的字段名。

select T.Table2ID,
       (
         select T.*
         for xml raw, type
       ) as x1
from Table2 as T

如果您想要更通用的版本,可以使用动态SQL并根据表名和列名构建查询。

declare @TableName sysname 
declare @KeyColumnName sysname

set @TableName = 'master..spt_values'
set @KeyColumnName = 'Number'

declare @SQL nvarchar(500)

set @SQL = '
select '+@KeyColumnName+',
       (
         select T.*
         for xml raw, type
       ) as x1
from '+@TableName+' as T'

exec (@SQL)

答案 1 :(得分:0)

对不起,如果我误解了,但这或多或少是你追求的原则吗?

;WITH Base AS
(
    SELECT   Cat    = PC.Name
            ,SubCat = SC.Name
    FROM Production.ProductCategory     PC
    JOIN Production.ProductSubcategory  SC  ON SC.ProductCategoryID = PC.ProductCategoryID
)
SELECT Cat, (SELECT SubCat FROM Base T2 WHERE T2.Cat = T1.Cat FOR XML AUTO )DT
FROM Base T1