Sql 在解析XML数据时,是否有方法删除显式属性名称?

Sql 在解析XML数据时,是否有方法删除显式属性名称?,sql,sql-server,Sql,Sql Server,在我的XML解析查询中,我有: SELECT Id, DeveloperId, PublisherId, Data.value('(/Game/DeveloperName/text())[1]', 'nvarchar(50)') DeveloperName, Data.value('(/Game/PublisherName/text())[1]', 'nvarchar(50)') PublisherName, Data.value('(/Game/Genre/text())[1]', 'nvar

在我的XML解析查询中,我有:

SELECT Id, DeveloperId, PublisherId,
Data.value('(/Game/DeveloperName/text())[1]', 'nvarchar(50)') DeveloperName,
Data.value('(/Game/PublisherName/text())[1]', 'nvarchar(50)') PublisherName,
Data.value('(/Game/Genre/text())[1]', 'nvarchar(50)') Genre,
FROM GameDataTable;
我想知道是否可以不显式地写

'DeveloperName, Publisher, Genre' 
尽可能减少打字错误中的人为错误,并减少一些空间。我曾想过创建一个临时表,但这不是很有效吗


如果有人有任何建议,那就太好了。

一个选项是规范化数据,然后透视透视透视是可选的

范例

返回

没有支点


假设您指的是XQuery而不是别名“。。。。简短回答:不,非常确定不能按索引引用元素,因为根据设计,它们不必在两个不同的记录上处于相同的顺序。但是,既然您似乎有publisher/developer的外键,那么为什么XML中有相同的数据呢?您不能加入引用表并从开发人员/发布者表中获取名称值吗?这些lvl1和lvl2是什么?@Darnold14这是一个安全网,以防您有多个级别1节点。这是可选的。如果不需要的话。点击3小时前编辑的图片查看原稿。酷,我明白了。谢谢@Darnol14很乐意帮忙。不用担心,我知道了。谢谢你!
Declare @YourTable table (ID int,DeveloperID int,PublisherID int,Data xml)
Insert Into @YourTable values
(1,2365,10056,'<Game><DeveloperName>This is the Developer Name</DeveloperName><PublisherName>This is the Publisher Name</PublisherName><Genre>Drama</Genre></Game>')

Select *
 From (
        Select A.ID
              ,A.DeveloperID
              ,A.PublisherID
              ,B.*
         From  @YourTable A
         Cross Apply (
                        Select NodeName  = lvl2.n.value('local-name(.)', 'varchar(max)') 
                              ,NodeValue = lvl2.n.value('text()[1]', 'varchar(max)') 
                         From  Data.nodes('*')  lvl1(n)
                         Cross Apply lvl1.n.nodes('*') lvl2(n) 
                     ) B
       ) src
 Pivot (max(NodeValue) for NodeName in ([DeveloperName],[PublisherName],[Genre]) ) pvt