2012-05-05 10 views
3

xml出力については少し質問があります。動的SQLを使用したSQL Serverの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 Server 2005でFOR XML PATH機能、および相関サブクエリを使用する必要が

答えて

3

ありがとう - この線に沿って何か:

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要素が作成されますがAS 'dpr'のエイリアスと相関サブクエリとしてこれを使用して、単一の従業員

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

、次いでLをラップ<dpr>タグに、指定した部門の従業員のISTは:

<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> 

その後、<department>ノードを作成し、最も外側のSELECTに、このXMLフラグメントを追加し、あなたは、所望の出力を取得する必要があります。 FOR XML PATH詳細は

は、以下を参照してください。

+1

ありがとう、それは完璧に動作します!今、物事ははるかに理解できます。 – justartem

+0

@Caerus:はい、FOR XML PATHモードは、SQL ServerのXMLサポートに大きく貢献しています。 –

関連する問題