在SQL Server中读取存储过程中的xml数据

时间:2013-12-04 08:57:47

标签: sql sql-server tsql

我有这个T-SQL脚本:

DECLARE @idoc int

DECLARE @doc nvarchar(200)
SET @doc ='<ArrayOfString>
            <string>AL</string>
            <string>DZ</string>
        </ArrayOfString>'

    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;

    select *  
    FROM OPENXML (@idoc, '/ArrayOfString',2)
    WITH (string varchar(50))
    EXEC sp_xml_removedocument @idoc

这是一个存储过程。我发送了一些序列化的xml(在这个版本中,我将其声明为硬代码)。

我想获取所有<string>元素的值。在此变体中,它必须是:ALDZ,但我只得到'AL'。我的剧本中有什么不正确的?

2 个答案:

答案 0 :(得分:4)

declare @xml xml
set @xml = '<ArrayOfString 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <string>Dev_1</string>
    <string>Dev_3</string>
</ArrayOfString>'

SELECT 
    T.C.value('.', 'VARCHAR(10)')
from @xml.nodes('/ArrayOfString/string') T(C)

答案 1 :(得分:2)

如果您想使用OPENXML,请尝试:

DECLARE @idoc int

DECLARE @doc nvarchar(200)
SET @doc ='<ArrayOfString>
            <string>AL</string>
            <string>DZ</string>
        </ArrayOfString>'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;

select *  
    FROM OPENXML (@idoc, '/ArrayOfString/string',2)
    WITH (string varchar(50) '.')

EXEC sp_xml_removedocument @idoc