简而言之,我试图在 SQL Server 函数中使用一个变量,该变量在While循环内的每一轮中将其自身的值增加一个。
我将 xml 文本放入变量并尝试检索属性内的值,但它具有多个相似元素,因此我需要一一检索。
问题出在这段代码的最后一部分:
DECLARE
@XMLTI NVARCHAR(MAX),
@now INT = 1,
@pagos VARCHAR(50),
@Trx33 INT = 1,
@NumOperacionT VARCHAR(19),
@FechaPagoT VARCHAR(19),
@FormaDePagoT VARCHAR(50),
@MonedaT VARCHAR(80),
@TipoCambioT DECIMAL(22, 2) = 1.00,
@CtaBeneficiarioT VARCHAR(50),
@RfcEmisorCtaBenT VARCHAR(13),
@MontoT DECIMAL(22, 2),
@XML XML
SET @XMLTI = (SELECT xml FROM emi_trx33_complementos_r WHERE id_complemento = @Trx33 )
SET @XMLTI = REPLACE( @XMLTI, '<cfdi:', '<' )
SET @XMLTI = REPLACE( @XMLTI, '</cfdi:', '</' )
SET @XMLTI = REPLACE( @XMLTI, '<tfd:', '<' )
SET @XMLTI = REPLACE( @XMLTI, '<pago10:', '<' )
SET @XMLTI = REPLACE( @XMLTI, '</pago10:', '</' )
SET @XMLTI = REPLACE( @XMLTI, '<nomina12:', '<' )
SET @XMLTI = REPLACE( @XMLTI, '</nomina12:', '</' )
DROP TABLE IF EXISTS #Pagos
CREATE TABLE #Pagos
(
Id INT NOT NULL IDENTITY PRIMARY KEY ,
NumOperacion VARCHAR(19),
FechaPago VARCHAR(19),
FormaDePago VARCHAR(50),
Moneda VARCHAR(80),
TipoCambio DECIMAL(22, 2),
CtaBeneficiario VARCHAR(50),
RfcEmisorCtaBen VARCHAR(13),
Monto DECIMAL(22, 2)
)
SET @pagos = @XMLTI
SET @XML = @XMLTI
SET @pagos = CONVERT(VARCHAR(MAX), (SELECT @XML.query('count(/Comprobante/Complemento/Pagos/Pago)')))
SET @NumOperacionT = CONVERT(VARCHAR(MAX), (SELECT @XML.value('data(/Comprobante/Complemento/Pagos/Pago/@NumOperacion)[@MyVariable]', 'VARCHAR(30)')))
--Pagos =3
--now =1
WHILE @now < @pagos
BEGIN
SET @NumOperacionT = CONVERT(VARCHAR(MAX), (SELECT @XML.value('data(/Comprobante/Complemento/Pagos/Pago/@NumOperacion)[@now]', 'VARCHAR(30)')))
INSERT INTO X table @NumOperacionT
@now = @now + 1
END
但我收到以下错误
错误设置@NumOperacionT = convert(varchar(max),(select @XML.value('data(/Comprobante/Complemento/Pagos/Pago/@NumOperacion)[@MyVariable]','varchar(30)')))
选择@NumOperacionT 作为操作
[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]XQuery [value()]: / (2374) 需要一个节点或一组节点