Sql server 从存储为Varchar(max)的XML字段中获取多个值
我在SQL Server的varcharmax列中有此值:Sql server 从存储为Varchar(max)的XML字段中获取多个值,sql-server,Sql Server,我在SQL Server的varcharmax列中有此值: <VersionSeries><SeriesTypeIdList><int>3</int><int>4</int><int>2</int><int>29</int><int>31</int><int>32</int><int>39</int><
<VersionSeries><SeriesTypeIdList><int>3</int><int>4</int><int>2</int><int>29</int><int>31</int><int>32</int><int>39</int></SeriesTypeIdList></VersionSeries
像这样:
Declare @Version varchar(100)
Select @Version = '2016A Demo'
DECLARE @DataTable TABLE
(
Xml XML NOT NULL,
Code NVARCHAR(50) NULL
)
INSERT
INTO @DataTable(Xml)
values (N'<VersionSeries><SeriesTypeIdList><int>3</int><int>4</int><int>2</int><int>29</int><int>31</int><int>32</int><int>39</int></SeriesTypeIdList></VersionSeries>')
SELECT
T.c.value('.', 'nvarchar(50)') as Code
FROM @DataTable d
OUTER APPLY d.Xml.nodes('/VersionSeries/SeriesTypeIdList/int') T(c);
这是一个单独的语句,可以得到您想要的:
DECLARE @x2 XML = N'<VersionSeries><SeriesTypeIdList><int>3</int><int>4</int><int>2</int><int>29</int><int>31</int><int>32</int><int>39</int></SeriesTypeIdList></VersionSeries>';
SELECT t.c.query(N'.').value(N'(/*)[1]', N'int') AS [int_value]
FROM @X2.nodes(N'/VersionSeries/SeriesTypeIdList/*') AS [t]([c]);
DECLARE @x2 XML = N'<VersionSeries><SeriesTypeIdList><int>3</int><int>4</int><int>2</int><int>29</int><int>31</int><int>32</int><int>39</int></SeriesTypeIdList></VersionSeries>';
SELECT t.c.query(N'.').value(N'(/*)[1]', N'int') AS [int_value]
FROM @X2.nodes(N'/VersionSeries/SeriesTypeIdList/*') AS [t]([c]);