sql 服务器 xml.value 骨架动态案例

sql server xml.value skeleton dynamic cases

我正在使用 SQL 服务器 2005.I 想逐行查询 xml 条记录。 所以我使用了下面的代码。一共有三个记录。当我那样执行时,我只能看到一个记录。

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。 我想用dynamic for 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)')

提前致谢。

您可以使用 nodes() 将 XML 分解为 POSDetails 元素级别的行,然后使用 value() 提取 PSTATION 的内部文本和 INVNUMBER 作为 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)