【问题标题】:SQL Server XML output with dynamic SQL带有动态 SQL 的 SQL Server XML 输出
【发布时间】:2012-05-05 20:01:35
【问题描述】:

我遇到了一个关于 xml 输出的小问题。

I need to get xml structure like this:

这是我的程序,它将列出所有员工及其一些个人信息 基于输入。

CREATE PROC getDeptEmployees(@deptList varchar(500))
AS
BEGIN
SET NOCOUNT ON 

DECLARE @Query varchar(600)

SET @Query = '
SELECT department.DEPARTMENT_ID [f_Department_ID], department.DEPARTMENT_NAME  [f_Department_name],
dp.Employee_id [f_Employee_ID], dp.First_name [f_First_Name], 
dp.Last_Name [f_Last_name], dp.Email [f_email], dp.Salary [f_salary]
FROM dbo.Employees dp 
JOIN DEPARTMENTS department 
ON dp.DEPARTMENT_ID = department.DEPARTMENT_ID
WHERE dp.Department_id IN (' + @deptList + ') 
for XML AUTO, ROOT(''table'')'

EXEC(@Query)    
END
GO

我得到的是here 但我仍然不知道如何添加 DPR 节点。

谢谢

【问题讨论】:

    标签: sql xml sql-server-2008


    【解决方案1】:

    您需要使用 SQL Server 2005 中的 FOR XML PATH 功能和相关子查询 - 类似于以下内容:

    SELECT 
        d.Department_ID AS '@f_Department_ID',
        d.Department_Name AS '@f_Department_name',
        (SELECT 
            e.BusinessEntityID AS '@f_Employee_ID',
            e.FirstName AS '@f_First_Name',
            e.LastName AS '@f_Last_name',
                e.Email AS '@f_email',
            e.Salary AS '@f_salary'
         FROM
            dbo.Employee e
         WHERE
            e.Department_ID = d.Department_ID
         FOR XML PATH('dp'), TYPE
        ) AS 'dpr' 
    FROM 
        dbo.Department d 
    WHERE 
        d.DepartmentID IN (.......) 
    ORDER BY 
        d.DepartmentID
    FOR XML PATH('department'), ROOT('table')
    

    基本上,最里面的查询为单个员工创建 XML 元素

    <dp f_Employee_ID="6" f_First_Name="Jossef" f_Last_name="Goldberg" f_salary="998320692" />
    

    将其用作别名为 AS 'dpr' 的关联子查询,然后将给定部门的员工列表包装到 &lt;dpr&gt; 标记中:

    <dpr>
      <dp f_Employee_ID="4" f_First_Name="Rob" f_Last_name="Walters" f_salary="112457891" />
      <dp f_Employee_ID="11" f_First_Name="Ovidiu" f_Last_name="Cracium" f_salary="974026903" />
      <dp f_Employee_ID="12" f_First_Name="Thierry" f_Last_name="D'Hers" f_salary="480168528" />
      <dp f_Employee_ID="13" f_First_Name="Janice" f_Last_name="Galvin" f_salary="486228782" />
    </dpr>
    

    然后将此 XML 片段添加到最外层的 SELECT,这将创建 &lt;department&gt; 节点,您应该会得到所需的输出。

    有关FOR XML PATH 的更多信息,请参阅:

    【讨论】:

    • 谢谢你,它工作得很好!现在事情变得更容易理解了。
    • @Caerus:是的,FOR XML PATH 模式是对 SQL Server 的 XML 支持的一个重要且非常有用的补充!
    猜你喜欢
    • 2010-11-28
    • 2023-03-18
    • 1970-01-01
    • 2015-11-28
    • 2016-11-24
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多