我正在使用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)')
提前感谢。
答案 0 :(得分:0)
您可以使用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)