Sql server 从XML读取变量

Sql server 从XML读取变量,sql-server,Sql Server,为了简化起见,假设我正在编写这样一个过程: create procedure [dbo].[TestXml] ( @Message xml ) -- Passing this '<Test><TransactionID>4</TransactionID></Test>' as declare @TransactionID int; 或 但这两种方法似乎都不起作用。试试这个:- Declare @xml xml = '<Test>&l

为了简化起见,假设我正在编写这样一个过程:

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

declare @TransactionID int;

但这两种方法似乎都不起作用。

试试这个:-

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

select prop.value('.', 'int')
   from @xml.nodes('Test/TransactionID') as msg(prop); 
Declare@xml='4'
选择属性值('.',int')
从@xml.nodes('Test/TransactionID')作为消息(prop);

结果:
4

没关系,我算出来了。这个很好用

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

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
DECLARE@XML='4'
声明@TransactionID INT
选择@TransactionID=t.p.value(“[1]”,以及“int”)
来自@XML.nodes('Test')t(p)
选择@TransactionID

奇怪的是,我一直认为这是行不通的,因为Management Studio在它下面加了下划线,并说它找不到p列。但是,如果我运行它,它仍然可以工作。现在它说它找不到t列。但如果我运行它,它会以任何方式工作。好的:)。我很高兴对你有用。
select @TransactionID = @Message.value('/Test[1]/TransactionID[1]', 'int')
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