Sql 为什么此存储过程只插入一项?

Sql 为什么此存储过程只插入一项?,sql,xml,sql-server-2008,parsing,sqlxml,Sql,Xml,Sql Server 2008,Parsing,Sqlxml,好的,我对SQL Server 2008非常陌生,但我的任务是创建一个过程,它将从某处加载一些XML文件,并将其名称和数据解析到一个两列表中 下面是给定文件内容的大致情况(尽管它包含大约100个实际条目): 选择的内容始终是一个包含“末日之剑”的单行名称和包含“+1到NUB”的数据。当我调用此存储过程(“exec TestParse”)时,它只影响一行 这里的任何指导都会很有帮助。要获得两行,必须将根/数据传递到节点()函数: select x.TRANS.value('(value/t

好的,我对SQL Server 2008非常陌生,但我的任务是创建一个过程,它将从某处加载一些XML文件,并将其名称和数据解析到一个两列表中

下面是给定文件内容的大致情况(尽管它包含大约100个实际条目):

选择的内容始终是一个包含“末日之剑”的单行名称和包含“+1到NUB”的数据。当我调用此存储过程(“exec TestParse”)时,它只影响一行


这里的任何指导都会很有帮助。

要获得两行,必须将
根/数据
传递到
节点()
函数:

select
    x.TRANS.value('(value/text())[1]','varchar(255)') as DATA,
    x.TRANS.value('@name', 'varchar(255)') as NAME
from @XmlFile.nodes('/root/data') as x(TRANS)

感谢您的及时回复!这确实有效。我必须找到一个更丰富的资源来理解为什么这是。。。但是您不必提供这些,我们非常感谢您的帮助,因为节点返回xpath提供的所有元素。如果您提供root,它将只返回一行,因为只有一个root元素
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

   CREATE PROCEDURE TestParse AS
    BEGIN
    IF OBJECT_ID('dbo.TRANS', 'U') IS NOT NULL
        DROP TABLE TRANS
    DECLARE @XmlFile XML
    SELECT @XmlFile = BulkColumn
    FROM OPENROWSET(BULK 'C:/TestTest.xml', SINGLE_BLOB) as x

    CREATE TABLE dbo.TRANS
    (
        NAME VARCHAR(255),
        DATA VARCHAR(255)
    )
    BEGIN
        INSERT INTO TRANS
        (
            NAME,
            DATA
        )
        SELECT
            x.TRANS.value('(/root)[1]','varchar(255)') AS DATA,
            x.TRANS.value('(/root/data/@name)[1]', 'varchar(255)') AS NAME
        FROM @XmlFile.nodes('/root') AS x (TRANS)
    END
    select * from TRANS
END
GO
select
    x.TRANS.value('(value/text())[1]','varchar(255)') as DATA,
    x.TRANS.value('@name', 'varchar(255)') as NAME
from @XmlFile.nodes('/root/data') as x(TRANS)