无法在SQL Server中打开xml

时间:2016-10-18 05:56:17

标签: sql sql-server openxml

这是我的样本xml,

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClientContactDetail xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ClientContactDetail>
        <PersonName>adsf asfd</PersonName>
        <EmailAddress>test@gmail.com</EmailAddress>
        <PhoneNumber>9876543210</PhoneNumber>
    </ClientContactDetail>
</ArrayOfClientContactDetail>

这是我的sql代码:

DECLARE @idoc IN

EXEC sp_xml_preparedocument @idoc OUTPUT
,@ClientDetail;


SELECT *
FROM OPENXML(@idoc, 'ArrayOfClientContactDetail/ClientContactDetail', 2) WITH (
    PersonName VARCHAR(100) '@PersonName'
    ,EmailAddress VARCHAR(100) '@EmailAddress'
    ,PhoneNumber VARCHAR(15) '@PhoneNumber'
    ,CompanyID INT '@CompanyID'
    );

1 个答案:

答案 0 :(得分:2)

您正在ColPattern中指定您想要属性而不是节点值。

@idoc更改为select C.X.value('(PersonName/text())[1]', 'varchar(100)') as PersonName, C.X.value('(EmailAddress/text())[1]', 'varchar(100)') as EmailAddress, C.X.value('(PhoneNumber/text())[1]', 'varchar(100)') as PhoneNumber, C.X.value('(CompanyID/text())[1]', 'varchar(100)') as CompanyID from @ClientDetail.nodes('ArrayOfClientContactDetail/ClientContactDetail') as C(X);

完成Celluloid::Future后,请不要忘记致电future_object.value

如果您使用的是SQL Server 2005或更高版本,则可以使用XML数据类型。

{{1}}