SQL Server的xml.value骨架的动态情况(sql server xml.value s

2019-09-29 17:32发布

我使用SQL Server 2005.I要查询XML记录按行来排。 所以,我是用下面的代码。 有三个记录。 当我excuted这样,我可以看到一个只记录。

DECLARE @Xml XML

DECLARE @Emp TABLE(ps NVARCHAR(MAX) NULL,inv NVARCHAR(MAX) NULL)


INSERT INTO @Emp(ps,inv)

SELECT  @Xml.value('(/NewDataSet/POSDetails/PSTATION)[1]', 'NVARCHAR(MAX)'),

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[1]', 'NVARCHAR(MAX)')

 SELECT * FROM @Emp

这样,我用接下来的两个SQL语句上面的SQL。 我想用动态的index.Can怎么用? 请指教。

@Xml.value('(/NewDataSet/POSDetails/PSTATION)[2]/[3]', 'NVARCHAR(MAX)') 

INSERT INTO @Emp(ps,inv)

SELECT  @Xml.value('(/NewDataSet/POSDetails/PSTATION)[2]', 'NVARCHAR(MAX)'),

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[2]', 'NVARCHAR(MAX)')

INSERT INTO @Emp(ps,inv)

SELECT  @Xml.value('(/NewDataSet/POSDetails/PSTATION)[3]', 'NVARCHAR(MAX)'),

@Xml.value('(/NewDataSet/POSDetails/INVNUMBER)[3]', 'NVARCHAR(MAX)')

预先感谢。

Answer 1:

您可以使用nodes()到XML分解到上排POSDetails元素水平,然后使用value()来提取的内部文本PSTATIONINVNUMBER为NVARCHAR数据,这样的事情:

INSERT INTO @Emp(ps,inv)
SELECT 
    P.value('(PSTATION)[1]', 'NVARCHAR(MAX)'),
    P.value('(INVNUMBER)[1]', 'NVARCHAR(MAX)')
FROM @Xml.nodes('/NewDataSet/POSDetails') AS T(P)


文章来源: sql server xml.value skeleton dynamic cases