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/

10-10 06:27