Select 语句来检索 xml 输出,如下所示

Dee*_*ons 1 sql-server-2005 xml

有人可以为我提供一些线索或解决方案来检索如下记录集吗?

注意:我阅读了 msdn 文档,但除了脱发之外别无他法:(

只是假设我有 2 个表通过 Rid 字段连接

表 1 列:

 Rid, UserName, Hash
Run Code Online (Sandbox Code Playgroud)

表 2 列:

 Rid, Phone, City, Email
Run Code Online (Sandbox Code Playgroud)

Table1Table2通过Rid柱连接。

我想使用 xml 自动或 xml 显式或您在 SQL Server 2005 Express 中获得的任何 xml 操作来获得 xml 输出。

预期输出:

<UserDetails>
    <Account>
        <UserName>
        </UserName>
        <Hash>
        </Hash>
    </Account>
    <Personal>
        <Phone>
        </Phone>
        <City>
        </City>
    </Personal>
</UserDetails>
Run Code Online (Sandbox Code Playgroud)

@matt 请查看我在下面创建的程序。当您在开始时使用代码执行存储过程时,您就会知道我面临的问题

stack_getusers  '<Request Type="GetUsers" CRUD="R">
                            <UserDetails>
                                <Rid></Rid>
                            </UserDetails>
                        </Request>'

CREATE PROCEDURE [dbo].[stack_getusers]    
@doc NTEXT    
AS    
DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc    
SELECT 
    t1.UserName AS "Account/UserName",
    t1.Hash AS "Account/Hash",
    (
        SELECT t2.Phone AS "Personal/Phone",
               t2.City AS "Personal/City"
        FROM table1 t2
            INNER JOIN table2 t3 ON t2.rid = t3.rid WHERE t2.rid = t1.rid AND (xml.Rid = '' OR t1.rid = xml.Rid)
        FOR XML PATH('Personals')
    )
FROM table1 t1
    INNER JOIN table2 t2 ON t1.rid = t2.rid
OPENXML (@idoc,'/Request/Users',2)
WITH (Rid int) as xml
where (xml.Rid = '' OR t1.rid = xml.Rid)
FOR XML PATH ('UserDetails');
EXEC sp_xml_removedocument @idoc
Run Code Online (Sandbox Code Playgroud)

Mat*_*t M 7

试试这个:

SELECT 
    t1.UserName AS "Account/UserName",
    t1.Hash AS "Account/Hash",
    t2.Phone AS "Personal/Phone",
    t2.City AS "Personal/City"
FROM table1 t1

    INNER JOIN table2 t2
        ON t1.rid = t2.rid

FOR XML PATH ('UserDetails');
Run Code Online (Sandbox Code Playgroud)

为了回应您的评论,我添加了第二个代码示例。我不知道这是否可行,或者它是否是实现您想要的目标的最佳方式。请告诉我。

SELECT 
    t1.UserName AS "Account/UserName",
    t1.Hash AS "Account/Hash",
    (
        SELECT
            t2.Phone AS "Personal/Phone",
            t2.City AS "Personal/City"
        FROM table1 t2

            INNER JOIN table2 t3
                ON t2.rid = t3.rid

        WHERE t2.rid = t1.rid

        FOR XML PATH('Personals')
    )
FROM table1 t1

    INNER JOIN table2 t2
        ON t1.rid = t2.rid

FOR XML PATH ('UserDetails');
Run Code Online (Sandbox Code Playgroud)