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)
我正在使用 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)