我有这个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>
元素的值。在此变体中,它必须是:AL
和DZ
,但我只得到'AL'。我的剧本中有什么不正确的?
答案 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