Sql 从xml数据列中选择属性作为行
我有一个xml专栏,里面有简单的xml,比如Sql 从xml数据列中选择属性作为行,sql,sql-server,xml,Sql,Sql Server,Xml,我有一个xml专栏,里面有简单的xml,比如 <Data att1="test1" att123="test123" /> 尝试使用节点和查询函数,但它可以使用元素,但不能使用属性。。。这可以在不将属性转换为元素的情况下完成吗 编辑:我可以获取属性值,但如何也获取每行的属性名称 EDIT2:解决了这个问题,这个函数有一个本地名称 SELECT T.id, T2.Att.value('local-name(.)', 'varchar(50)'), T2.Att.value('.',
<Data att1="test1" att123="test123" />
尝试使用节点和查询函数,但它可以使用元素,但不能使用属性。。。这可以在不将属性转换为元素的情况下完成吗
编辑:我可以获取属性值,但如何也获取每行的属性名称
EDIT2:解决了这个问题,这个函数有一个本地名称
SELECT T.id, T2.Att.value('local-name(.)', 'varchar(50)'), T2.Att.value('.', 'nvarchar(max)')
FROM T
CROSS APPLY DataXml.nodes('/Data/@*') as T2(Att)
where T.id = 354
事情很简单:
SELECT T.id, T2.Att.value('local-name(.)', 'varchar(50)'), T2.Att.value('.', 'nvarchar(max)')
FROM T
CROSS APPLY DataXml.nodes('/Data/@*') as T2(Att)
where T.id = 354
你可以这样写:
DECLARE @xml as xml
DECLARE @path as varchar(max)
DECLARE @index int, @count int
SET @xml =
'<Data att1="test1" att123="test123" />'
SELECT @index = 1
SET @count = @xml.query('count(/Data/@*)').value('.','int')
WHILE @index <= @count
BEGIN
SELECT @xml.value('local-name((/Data/@*[sql:variable("@index")])[1])',
'varchar(max)')
SET @index = @index + 1
END
将@xml声明为xml
将@path声明为varchar(最大值)
声明@index int,@count int
SET@xml=
''
选择@index=1
SET@count=@xml.query('count(/Data/@*)).value('.','int'))
而@index
DECLARE @xml as xml
DECLARE @path as varchar(max)
DECLARE @index int, @count int
SET @xml =
'<Data att1="test1" att123="test123" />'
SELECT @index = 1
SET @count = @xml.query('count(/Data/@*)').value('.','int')
WHILE @index <= @count
BEGIN
SELECT @xml.value('local-name((/Data/@*[sql:variable("@index")])[1])',
'varchar(max)')
SET @index = @index + 1
END