1. 程式人生 > >SQL Server 返回xml資料

SQL Server 返回xml資料

返回格式如

建立臨時資料

SELECT IDENTITY(INT,1,1) AS ID,*INTO #TempTableFROM( SELECT  '張三' AS Name,'張家長' AS Parent,12 AS  Age, '男' AS Sex, '+0743 123456' AS Phone,'[email protected]' AS Mail UNION ALL SELECT '李四' AS Name,'李家長' AS Parent,13 AS  Age,'男' AS Sex,null AS Phone,'[email protected]' AS Mail UNION ALL SELECT '王五' AS Name,'王家長' AS Parent,12 AS  Age,'男' AS Sex,'+0743 111222' AS Phone,null AS Mail) T

資料處理

DECLARE @Count INT ,@Index INT=1 ,@XmlStr NVARCHAR(MAX)='',@XmlText XML='' SELECT @Count=COUNT(1) FROM #TempTable  WHILE (@Count>[email protected])BEGIN   DECLARE @Contact XML  --行專列   SET @Contact=  (       SELECT * FROM     (      SELECT         CASE [Type]        WHEN 'ContactMail' THEN  'EM'         WHEN 'ContactPhone' THEN  'TE'        ELSE ''END AS '@Type',        [ID] AS '@ID'      FROM       (        SELECT           CASE WHEN ISNULL(Mail,'')<>'' THEN CAST( Mail AS VARCHAR(50)) END AS ContactMail           ,CASE WHEN ISNULL(Phone,'')<>'' THEN CAST( Phone AS VARCHAR(50)) END  AS ContactPhone           FROM #TempTable          WHERE
[email protected]
      ) p       UNPIVOT ([ID] FOR [Type] IN (ContactMail,ContactPhone)) AS unpvt    ) A FOR XML PATH('item'),Type    )    --拼接XML  SET @XmlStr +=  (     SELECT     (        SELECT         name,--節點         (          SELECT             Age AS '@Age', --節點屬性            Sex AS '@Sex',             (              SELECT                 Parent AS '@Name',                  (                  SELECT @Contact FOR XML PATH('Comm'),TYPE                 )               FOR XML PATH('Contact'),TYPE             )          FOR XML PATH('Studentfo'),Type        )      FOR XML PATH('Student'),Type    )    FROM #TempTable    WHERE
[email protected]
    FOR XML PATH('Data')    )  SET @Index = @Index + 1ENDSELECT @XmlText =  @XmlStrSELECT @XmlText AS XmlText DROP TABLE #TempTable