sql server xml.value骨架动态案例

时间:2016-05-19 08:51:58

标签: xml sql-server-2005

我正在使用SQL Server 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做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)')

提前感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用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)