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

が必要なのは 2 番目のクエリです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 に答える