Sql 在解析XML数据时,是否有方法删除显式属性名称?
在我的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
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