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