2013-05-07 57 views
0

为了简化起见一个变量,想象我在写这样一个过程:读取的XML

create procedure [dbo].[TestXml] 
(@Message xml) -- Passing this '<Test><TransactionID>4</TransactionID></Test>' 
as 

declare @TransactionID int; 

我现在该如何解析事务ID,4,从@Message@TransactionID

我期待像

select @TransactionID = msg.prop.value('@TransactionID', 'int') 
     from @Message.nodes('Test') as msg(prop); 

select @TransactionID = prop.value('@TransactionID', 'int') 
     from @Message.nodes('Test') as msg(prop); 

但是这些都似乎工作。

回答

1

尝试这一个 -

DECLARE @XML XML = '<Test><TransactionID>4</TransactionID></Test>' 

DECLARE @TransactionID INT 

SELECT @TransactionID = t.p.value('.[1]', 'int') 
FROM @XML.nodes('Test') t(p) 

SELECT @TransactionID 
+0

奇怪的是,我一直在想这不起作用,因为Management Studio中被强调,并说,它无法找到P列。但是,如果我运行它,无论如何它都可以工作。 – pdr 2013-05-07 11:46:25

+0

请尝试更新的答案。 – Devart 2013-05-07 11:47:32

+0

现在它说它找不到列t。但是,如果我运行它,它可以工作。 – pdr 2013-05-07 11:48:58

0

试试这个: -

Declare @xml xml = '<Test><TransactionID>4</TransactionID></Test>' 

select prop.value('.', 'int') 
    from @xml.nodes('Test/TransactionID') as msg(prop); 

结果:4

0

没关系,我理解了它。这很好地工作

select @TransactionID = @Message.value('/Test[1]/TransactionID[1]', 'int')