SQL从带有格式化输出的XML列中选择
如何选择以逗号分隔并用自定义格式修饰的XML列表值例如:x 输入示例,它将有多行SQL从带有格式化输出的XML列中选择,sql,sql-server,Sql,Sql Server,如何选择以逗号分隔并用自定义格式修饰的XML列表值例如:x 输入示例,它将有多行 1 | <User Name="AAA" /><User Name="BBB" /> 2 | <User Name="CCC" /><User Name="DD" /> 我的进步 DECLARE @xml XML SELECT @xml = N' <User Name="AAA"/> <User Name="BBB"/>' De
1 | <User Name="AAA" /><User Name="BBB" />
2 | <User Name="CCC" /><User Name="DD" />
我的进步
DECLARE @xml XML
SELECT @xml = N'
<User Name="AAA"/>
<User Name="BBB"/>'
Declare @TempT TABLE (id int, data xml)
INSERT INTO @TempT VALUES (1,@xml)
set @xml = N'
<User Name="CCC"/>
<User Name="DDD"/>'
INSERT INTO @TempT VALUES (2,@xml)
SELECT * from @TempT
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+', ' ,'')
+ 'x'+T.C.value('@Name', 'nvarchar(50)') +'x'
FROM @xml.nodes('User') T(C)
SELECT @listStr
DBFIDLE请在问题中添加数据库管理工具的名称。您使用的是哪种产品?SQL只是一种查询语言,而不是特定数据库产品的名称。MSSQL server 2016此查询不是通用的,因为对于我需要编辑的每个新记录,选择查询不是按记录编辑两项吗?请通过添加真实的XML内容来澄清问题。
DECLARE @xml XML
SELECT @xml = N'
<User Name="AAA"/>
<User Name="BBB"/>'
Declare @TempT TABLE (id int, data xml)
INSERT INTO @TempT VALUES (1,@xml)
set @xml = N'
<User Name="CCC"/>
<User Name="DDD"/>'
INSERT INTO @TempT VALUES (2,@xml)
SELECT * from @TempT
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+', ' ,'')
+ 'x'+T.C.value('@Name', 'nvarchar(50)') +'x'
FROM @xml.nodes('User') T(C)
SELECT @listStr
Declare @TempT TABLE (id int, data xml)
insert into @TempT values (1, N'<User Name="AAA"/><User Name="BBB"/>');
insert into @TempT values (2, N'<User Name="CCC"/><User Name="DDD"/>');
SELECT * from @TempT;
select 'x' + data.value('(User/@Name)[1]', 'varchar(50)') + 'x,'
+ 'x' + data.value('(User/@Name)[2]', 'varchar(50)') + 'x'
from @TempT
GO
id | data
-: | :-------------------------------------
1 | <User Name="AAA" /><User Name="BBB" />
2 | <User Name="CCC" /><User Name="DDD" />
| (No column name) |
| :--------------- |
| xAAAx,xBBBx |
| xCCCx,xDDDx |
declare @TempT table(data xml)
insert into @TempT (data) values
(N'<User Name="AAA"/><User Name="BBB"/><User Name="CCC"/>'),
(N'<User Name="CCC"/><User Name="DDD"/>');
select stuff((
select ',x'+N.X.value('.', 'nvarchar(50)')+'x'
from T.data.nodes('/User/@Name') as N(X)
for xml path(''), type
).value('text()[1]', 'nvarchar(max)'), 1, 1, '')
from @TempT as T;
-------------------
xAAAx,xBBBx,xCCCx
xCCCx,xDDDx