0

因此,我将整个 XML 文件存储在表的单行/列中。我需要将它分配给一个变量并指定 WITH NAMESPACES。我想不出任何有效的语法。

DECLARE @xmlText xml

 set  @xmlText = (select rowdata    
 FROM dbo.Staging with (nolock)    
 WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID) 

我会以某种方式设计一个 sql 语句来执行吗?但是,如果我这样做,我不确定如何将其分配回局部变量,因为它将位于另一个 spid 上。我难住了!


我将使用 xquery :)

这通过了语法检查...

;WITH XMLNAMESPACES('http://xxx' AS p) 
(select @xmlText = rowdata    
 FROM dbo.Staging with (nolock)    
 WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID) 


SELECT      
MFRRequestID = Y.i.value('(@id)[1]', 'int'),     
RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,     
AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),    
ReferralDate = CIF.value('(ReferralDate)[1]', 'datetime'),     
SuspenseBalance = CIF.value('(SuspenseBalance)[1]', 'varchar(25)') 
FROM      @xmltext.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') 
AS Y(i) CROSS APPLY     i.nodes('p:CaseInformation') AS Tbl(CIF) 

但我得到了错误......

XQuery [nodes()]:名称“p”不表示名称空间。

这与我昨天问的一个问题有关。我基本上得到了这个确切的东西,但是我没有从表中分配 @xmltext 变量(这是我需要为最终生产代码做的),我复制并粘贴了 xml 并将其分配为硬编码字符串,这样我就可以制定 xquery 语法。很抱歉造成混乱,这对我来说都是新的。

4

1 回答 1

0

这是您需要的第二个查询WITH XMLNAMESPACES

DECLARE @xmlText xml;

SELECT @xmlText = rowdata    
FROM dbo.Staging
WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID; 


WITH XMLNAMESPACES('http://xxx' AS p)
SELECT      
MFRRequestID = Y.i.value('(@id)[1]', 'int'),     
RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,     
AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),    
ReferralDate = CIF.value('(ReferralDate)[1]', 'datetime'),     
SuspenseBalance = CIF.value('(SuspenseBalance)[1]', 'varchar(25)') 
FROM      @xmltext.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') 
AS Y(i) CROSS APPLY     i.nodes('p:CaseInformation') AS Tbl(CIF);
于 2012-07-27T14:06:39.750 回答