繁体   English   中英

创建时在一个短表达式内将元素转换为属性 XML

[英]Convert elements into attributes within one short expression when creating XML

我找到了一种常用方法,可以从元素名称更改为属性名称的表中创建 XML。 看起来像

SELECT  ElementName_1 as "@AttName_1", ElementName_2 as "@AttName_2", ElementName_3 as "@AttName_3", etc..
from table
for XML PATH

有没有办法缩短这种转换条目? 例如,我有几十个字段\列,需要共同转换除一个之外的所有字段。 所以,正式它看起来像

 (SELECT table.* --> all @attributes --> except 'OneFieldName'

如果可能的话,如何正确记录?

指定列会更好。 如果有人添加新列并且您使用的是SELECT *怎么办?

如果不想自己编写定义,可以使用sys.columns系统视图构建它。 它将是这样的:

SELECT CONCAT(QUOTENAME([name]), ' AS "AttName_', [column_id], '"') 
FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY [column_id]) AS [column_id]
          ,[name]
    FROM sys.columns
    WHERE [object_id] = OBJECT_ID('dbo.table')
        AND [name] NOT IN ('OneFieldName')
) DS

您甚至可以使用STRING_AGG构建整个SELECT

SELECT STRING_AGG(CAST(CONCAT(QUOTENAME([name]), ' AS "AttName_', [column_id], '"') AS NVARCHAR(MAX)), ', ') WITHIN GROUP (ORDER BY [column_id])
FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY [column_id]) AS [column_id]
          ,[name]
    FROM sys.columns
    WHERE [object_id] = OBJECT_ID('dbo.table')
        AND [name] NOT IN ('OneFieldName')
) DS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM