使用value和attibutes将SQL行转换为XML标记

akm*_*akm 4 xml sql t-sql sql-server sql-server-2012

我有一个简单的平面SQL表,有三列A,B和C:

CREATE TABLE [tmp]
(
  [A] NVARCHAR(32) NULL
, [B] NVARCHAR(32) NULL
, [C] NVARCHAR(32) NULL
);
Run Code Online (Sandbox Code Playgroud)

我想将每一行转换为XML对象

<Parameter name="A" description="B">666</Parameter>
Run Code Online (Sandbox Code Playgroud)

如果我使用FOR XML AUTO,则所有列都将转换为XML属性.我可以使用FOR XML AUTO, ELEMENTS,或者使用FOR XML RAW以获得标签代替,但我想转换列A,并B以一个属性,使用列C作为标记值.

我怎样才能得到这个结果?

Shn*_*ugo 5

在几乎所有情况下FOR XML PATH都是最好的方法(也是最快的)

CREATE TABLE [tmp]
(
  [A] NVARCHAR(32) NULL
, [B] NVARCHAR(32) NULL
, [C] NVARCHAR(32) NULL
);
INSERT INTO [tmp] VALUES
 ('A','B','666')
,('One more A','And one more B','777');

SELECT A AS [@name]
      ,B AS [@description]
      ,C AS [*]
FROM [tmp]
FOR XML PATH('Paramter');


--Clean Up
GO
DROP TABLE [tmp];
Run Code Online (Sandbox Code Playgroud)

结果

<Paramter name="A" description="B">666</Paramter>
<Paramter name="One more A" description="And one more B">777</Paramter>
Run Code Online (Sandbox Code Playgroud)