【问题标题】:sql server xml.value skeleton dynamic casessql server xml.value 骨架动态案例
【发布时间】:2016-05-19 08:51:57
【问题描述】:

我使用的是 SQL Server 2005。我想逐行查询 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 语句。 我想对索引使用动态。我可以使用吗?请指教。

@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)')

提前致谢。

【问题讨论】:

    标签: xml sql-server-2005


    【解决方案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)
    

    【讨论】:

    • 非常感谢。我明白了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2013-10-14
    • 2014-10-17
    相关资源
    最近更新 更多