Sql server 使用sql查询创建嵌入式列xml
我有一张表,里面有下面的记录Sql server 使用sql查询创建嵌入式列xml,sql-server,Sql Server,我有一张表,里面有下面的记录 +------------+---------+ | State |Strength | +------------+---------+ | AR | 10000 | | AK | 20000 | +------------+---------+ 我想以下面的格式介绍通用xml <Fields><AR>10000</AR><AK>20000</AK>&l
+------------+---------+
| State |Strength |
+------------+---------+
| AR | 10000 |
| AK | 20000 |
+------------+---------+
我想以下面的格式介绍通用xml
<Fields><AR>10000</AR><AK>20000</AK></Fields>
1000020000
到目前为止我都试过了
SELECT '<'+State+'>' + Strength+'</'+State+'>'
FROM tbl
FOR XML PATH (''), ROOT('Fields')
选择“”+强度+“”
来自tbl
对于XML路径(“”),根(‘字段’)
结果我得到-
AR10000/ark20000/AK
您应该对xml路径和value
方法使用type
DECLARE @SampleData AS TABLE (State varchar(20), Strength int)
INSERT INTO @SampleData
VALUES ('AR', 10000), ('AK', 20000) ,('MP', 30000)
SELECT (SELECT CONCAT('<',sd.State,'>', sd.Strength, '</',sd.State, '>')
FROM @SampleData sd
FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)')
将@SampleData声明为表(State varchar(20),Strength int)
插入@SampleData
价值('AR',10000),('AK',20000),('MP',30000)
选择(选择混凝土(“”,标准强度“”)
来自@SampleData sd
对于XML路径(“”),键入.value(“[1]”,“[nvarchar(max)”)
参考链接:
或者像这样的简单查询
DECLARE @SampleData AS TABLE (State varchar(20), Strength int)
INSERT INTO @SampleData
VALUES ('AR', 10000), ('AK', 20000) ,('MP', 30000)
DECLARE @xml nvarchar(max) = N'<Fields>'
SELECT @xml += CONCAT('<',sd.State,'>', sd.Strength, '</',sd.State, '>')
FROM @SampleData sd
SET @xml += N'</ Fields>'
SELECT @xml
将@SampleData声明为表(State varchar(20),Strength int)
插入@SampleData
价值('AR',10000),('AK',20000),('MP',30000)
声明@xml nvarchar(max)=N“”
选择@xml+=CONCAT(“”,sd.Strength“”)
来自@SampleData sd
设置@xml+=N“”
选择@xml
对于xml路径和值
方法,应该使用类型
DECLARE @SampleData AS TABLE (State varchar(20), Strength int)
INSERT INTO @SampleData
VALUES ('AR', 10000), ('AK', 20000) ,('MP', 30000)
SELECT (SELECT CONCAT('<',sd.State,'>', sd.Strength, '</',sd.State, '>')
FROM @SampleData sd
FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)')
将@SampleData声明为表(State varchar(20),Strength int)
插入@SampleData
价值('AR',10000),('AK',20000),('MP',30000)
选择(选择混凝土(“”,标准强度“”)
来自@SampleData sd
对于XML路径(“”),键入.value(“[1]”,“[nvarchar(max)”)
参考链接:
或者像这样的简单查询
DECLARE @SampleData AS TABLE (State varchar(20), Strength int)
INSERT INTO @SampleData
VALUES ('AR', 10000), ('AK', 20000) ,('MP', 30000)
DECLARE @xml nvarchar(max) = N'<Fields>'
SELECT @xml += CONCAT('<',sd.State,'>', sd.Strength, '</',sd.State, '>')
FROM @SampleData sd
SET @xml += N'</ Fields>'
SELECT @xml
将@SampleData声明为表(State varchar(20),Strength int)
插入@SampleData
价值('AR',10000),('AK',20000),('MP',30000)
声明@xml nvarchar(max)=N“”
选择@xml+=CONCAT(“”,sd.Strength“”)
来自@SampleData sd
设置@xml+=N“”
选择@xml
TriV将是我的首选(已经+1)
但是,另一个选择(只是为了好玩)是通过枢轴。。。动态与否
动态
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([State]) From tbl Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ('+@SQL+') )p
) A
for XML Path(''''),Root(''Fields'')
'
Exec(@SQL)
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ([AK],[AR]) )p
) A
for XML Path(''),Root('Fields')
静态
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([State]) From tbl Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ('+@SQL+') )p
) A
for XML Path(''''),Root(''Fields'')
'
Exec(@SQL)
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ([AK],[AR]) )p
) A
for XML Path(''),Root('Fields')
两者都返回
<Fields>
<AK>20000</AK>
<AR>10000</AR>
</Fields>
20000
10000
TriV将是我的首选(已经+1)
但是,另一个选择(只是为了好玩)是通过枢轴。。。动态与否
动态
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([State]) From tbl Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ('+@SQL+') )p
) A
for XML Path(''''),Root(''Fields'')
'
Exec(@SQL)
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ([AK],[AR]) )p
) A
for XML Path(''),Root('Fields')
静态
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([State]) From tbl Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ('+@SQL+') )p
) A
for XML Path(''''),Root(''Fields'')
'
Exec(@SQL)
Select *
From (
Select *
From (
Select Col=[State]
,Val=[Strength]
From tbl
) A
Pivot (max([Val]) For [Col] in ([AK],[AR]) )p
) A
for XML Path(''),Root('Fields')
两者都返回
<Fields>
<AK>20000</AK>
<AR>10000</AR>
</Fields>
20000
10000
它可能会帮助您它可能会帮助您谢谢!!我使用的是SQL Server 2008,没有CONCAT函数。然而,我能够手动附加它们并使其工作<代码>选择@xml+='谢谢!!我使用的是SQL Server 2008,没有CONCAT函数。然而,我能够手动附加它们并使其工作<代码>选择@xml+='