ALTER PROCEDURE GetSingersGenere
(@SingerData ntext)
AS
BEGIN
DECLARE @hDoc int
exec sp_xml_preparedocument @hDoc OUTPUT,@SingerData
IF OBject_id('SingerTable') IS NOT NULL
BEGIN
DROP TABLE SingerTable
END
CREATE TABLE SingerTable
(
SingerName varchar(200)
)
INSERT INTO SingerTable
(
SingerName
)
SELECT * FROM OpenXML (@hDoc,'/Singers/Singer')
WITH (SingerName varchar(200)) XMLSinger
SELECT * FROM SingerTable
END
我执行的方式是这样的:
EXEC GetSingersGenere
'<Singers>
<Singer>
Joe
</Singer>
<Singer>
ACDC
</Singer>
</Singers>'
我看到NULL被插入表中。有人可以指出错误吗?
最佳答案
默认情况下,OPENXML将查看数据的属性值或子元素。如果您将选择写为:
SELECT * FROM OpenXML (@hDoc,'/Singers/Singer')
WITH (SingerName varchar(200) 'text()') XMLSinger
应该可以。请注意,在模式映射中添加了“ text()”,以指定我们只希望节点的文本值而不是任何属性值。
关于sql-server - 这个OpenXML有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3776424/