因此,我将整个 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 语法。很抱歉造成混乱,这对我来说都是新的。