Sql server 从存储为Varchar(max)的XML字段中获取多个值

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><

我在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></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]);