0

我有下一个问题。作为存储过程的结果,我有下一个文件:

CB0596201302                                                                                         
OP0596002 20130201V40V5E H1069004320928.80 48.88                                                                                      

存储过程是:

 ALTER PROCEDURE [dbo].[PA_UYInformeTransacciones]
    @mes INT,
    @anio INT
AS
BEGIN
SET NOCOUNT ON;

DECLARE 
DECLARE @EntidadesLimite TABLE (valorSUM DECIMAL(14,2), CIF NVARCHAR(18))
CREATE TABLE #tablatemporalFixing (tempfecha DATETIME, tempfixing DECIMAL(24,10))

DECLARE @EntidadResultado TABLE (CIF NVARCHAR(18), RegistroEntidad CHAR(530))
DECLARE @OperacionResultado TABLE (CIF NVARCHAR(18), RegistroOperacion CHAR(530))

DECLARE @Resultado TABLE (Resultado NVARCHAR(530))


    IF @srv IS NULL SET @srv = ''
IF @srvgc IS NULL SET @srvgc=''

    SELECT @idpais = P.IdPais, @idisoalocal = P.CodigoISOA
FROM Pais P
WHERE P.CodigoISOA = 'UYU'

IF (@mes < 10)
    BEGIN
        SET @fmes = '0'+CAST(@mes AS CHAR(1))
    END
ELSE
    BEGIN
        SET @fmes = CAST(@mes AS CHAR(2))
    END
SET @fanio = CAST(@anio AS CHAR(4))
SET @fecha = @fanio + @fmes + '01'
SET @finicio = CAST (@fecha as smalldatetime)
SET @ffin = dateadd(d,-1,dateadd(m,1, CAST (@fecha as smalldatetime)))

SET @aniomes = @fanio+@fmes

--Obtener los centros del país.
INSERT INTO @cts(IdCentro, Nombre, Bdv, FcambioVN, Bdn, FcambioNM, Bdm, idCentroMC)
SELECT IdCentro, Nombre, BaseDato, GlobalCash2010, BaseDatoGCH2010, FechaMulticentro, BaseDatoMulticentro, CodigoCentroMulticentro
FROM dbo.Centro
WHERE CodigoPais = @idpais
    AND BaseDatoGCH2010 IS NOT NULL
    AND Productivo = 1

WHILE EXISTS(SELECT 1 FROM @cts)
BEGIN
    SELECT TOP 1 @idct = IdCentro, @nombre = Nombre, @bdvieja = Bdv, @fcambioVN = FcambioVN, @bdnueva = Bdn,
        @fcambioNM = FcambioNM,@bdmmulticentro = Bdm, @idCentroMulticentro = idCentroMC
    FROM @cts

    SET @bdvieja = @srv + @bdvieja
    SET @bdnueva = @srv + @bdnueva

    IF @fcambioVN IS NULL OR (@fcambioVN IS NOT NULL AND @fcambioVN > @ffin) -- [(Versión Antigua)]
    BEGIN -- VERSIÓN ANTIGUA
        PRINT 'versión antigua:' + @bdvieja
        -- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
        DELETE FROM #tablatemporalFixing
        SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
              SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
              FROM '+@bdvieja+'.dbo.DiarioCierre D
                    INNER JOIN '+@bdvieja+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
                    INNER JOIN '+@bdvieja+'.dbo.ISOACentro I ON I.IdISOACentro=L.CodigoISOACentro
              WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
                    AND I.CodigoISOA=''USD''
                    ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing'
        EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

        -- Entidades con las que se hacen operaciones en el mes indicado
        SET @sql = 'SELECT '
        +'CIF = E.CIF, '
        +'Entidad = E.Entidad, '
        +'Direccion = (CASE WHEN E.Provincia IS NULL THEN '''' WHEN E.Provincia = '''' THEN '''' ELSE E.Provincia + '','' END) 
            + (CASE WHEN E.Direccion IS NULL THEN '''' WHEN E.Direccion = '''' THEN '''' ELSE E.Direccion + '' '' END) 
            + ISNULL(E.Numero,'''') '
        +' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
        --+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
        --+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
        +' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
        +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
        +' AND O.Anulada = 0 '
        +' GROUP BY E.CIF, E.Entidad, E.Provincia, E.Direccion, E.Numero ' 
        INSERT INTO @Entidad (CIF, Entidad, Direccion)
        EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

        -- Operaciones que se realizan en el mes indicado con Entidades
        SET @sql = 'SELECT '
        +'CodigoSucursal = CASE WHEN (@nombre LIKE ''%Carrasco%'') THEN ''001'' ELSE ''002'' END, '
        +'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
        +'ReciboOperacion = CAST(O.Recibo AS NVARCHAR(18)),'
        +'MonedaRecibida = CASE WHEN O.Compra = 0 THEN 
                    (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') 
                    ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA) END , '
        +'MonedaEntregada =  CASE WHEN O.Compra = 0 THEN
                    (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA)
                    ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
        +'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN CAST(ROUND(LO.Compensacion,2) AS DECIMAL(14,2)) ELSE CAST(ROUND(LO.Importe,2) AS DECIMAL(14,2))END , '
        +'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN CAST(ROUND(LO.Importe,2) AS DECIMAL(14,2)) ELSE CAST(ROUND(LO.Compensacion,2) AS DECIMAL(14,2))END , '
        +'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN 
                                                (CAST(''0'' AS DECIMAL(14,2)))
                                            ELSE 
                                                (CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
                                                                        FROM #tablatemporalFixing 
                                                                        WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
                                                                       ) AS MONEY)
                                                            ,2) AS DECIMAL(14,2)))
                                        END), '
        +'NumeroDocumentoTitularOperacion =  E.CIF, '
        +'NumeroDocumentoRepresentanteLegal = '''' '
        +' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
        +' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
        +' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
        +' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
        +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
        +' AND O.Anulada = 0 ' 
        INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
        EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre

    END
    ELSE
    BEGIN
        IF (@fcambioVN < @finicio) -- [(Versión Nueva)]
        BEGIN
            PRINT 'versión nueva:'+@bdNueva

            -- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
            DELETE FROM #tablatemporalFixing
            SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
              SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
              FROM '+@bdNueva+'.dbo.DiarioCierre D
                    INNER JOIN '+@bdNueva+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
                    INNER JOIN '+@bdNueva+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
              WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
                    AND I.IdISOA=''USD''
                    AND L.CodigoTipoISOA=0
                    ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
            EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

            -- Entidades con las que se hacen operaciones en el mes indicado
            SET @sql = 'SELECT '
            +'CIF = E.CIF, '
            +'Entidad = E.Entidad, '
            +'Direccion = (CASE WHEN ED.Provincia IS NULL THEN '''' WHEN ED.Provincia = '''' THEN '''' ELSE ED.Provincia + '','' END) 
                + (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END) 
                + (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END) 
                + (CASE WHEN E.Piso IS NULL THEN '''' WHEN E.Piso = '''' THEN '''' ELSE E.Piso + '' '' END) 
                + ISNULL(E.Puerta,'''') '
            +' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
            --+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
            +' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
            +' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
            +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
            +' AND O.CodigoEstadoOperacionEntidad = 1  '
            +' GROUP BY E.CIF, E.Entidad, ED.Provincia, ED.Direccion, ED.Numero, E.Piso, E.Puerta ' 
            INSERT INTO @Entidad (CIF, Entidad, Direccion)
            EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

            -- Operaciones que se realizan en el mes indicado con Entidades
            SET @sql = 'SELECT '
            +'CodigoSucursal = CASE WHEN (@nombre LIKE ''%UYMVD%'') THEN ''001'' ELSE ''002'' END, '
            +'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
            +'ReciboOperacion = O.Recibo, '
            +'MonedaRecibida = CASE WHEN O.Compra = 0 THEN 
                        (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') 
                        ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
            +'MonedaEntregada =  CASE WHEN O.Compra = 0 THEN
                        (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
                        ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
            +'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
            +'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
            +'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN 
                                                (CAST(''0'' AS DECIMAL(14,2)))
                                            ELSE 
                                                (CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
                                                                        FROM #tablatemporalFixing 
                                                                        WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
                                                                       ) AS MONEY)
                                                            ,2) AS DECIMAL(14,2)))
                                        END), '
            +'NumeroDocumentoTitularOperacion =  E.CIF, '
            +'NumeroDocumentoRepresentanteLegal = '''' '
            +' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
            +' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
            +' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
            +' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
            +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
            +' AND O.CodigoEstadoOperacionEntidad = 1  '
            INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
            EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre
        END
        ELSE -- [(Entre Versiones)]
        BEGIN
            IF @bdvieja IS NOT NULL
            BEGIN
                PRINT 'versión antigua mixta:'+@bdvieja

                -- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
                DELETE FROM #tablatemporalFixing
                SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
                      SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
                      FROM '+@bdvieja+'.dbo.DiarioCierre D
                            INNER JOIN '+@bdvieja+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
                            INNER JOIN '+@bdvieja+'.dbo.ISOACentro I ON I.IdISOACentro=L.CodigoISOACentro
                      WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+'''
                            AND I.CodigoISOA=''USD''
                            ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing'
                EXEC sp_executesql @sqlFixing, N'@finicio DATETIME', @finicio

                -- Entidades con las que se hacen operaciones en el mes indicado
                SET @sql = 'SELECT '
                +'CIF = E.CIF, '
                +'Entidad = E.Entidad, '
                +'Direccion = (CASE WHEN E.Provincia IS NULL THEN '''' WHEN E.Provincia = '''' THEN '''' ELSE E.Provincia + '','' END) 
                    + (CASE WHEN E.Direccion IS NULL THEN '''' WHEN E.Direccion = '''' THEN '''' ELSE E.Direccion + '' '' END) 
                    + ISNULL(E.Numero,'''') '
                +' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
                --+' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
                --+' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
                +' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
                +' WHERE O.Fecha BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' '
                +' AND O.Anulada = 0 '
                +' GROUP BY E.CIF, E.Entidad, E.Provincia, E.Direccion, E.Numero ' 
                INSERT INTO @Entidad (CIF, Entidad, Direccion)
                EXEC sp_executesql @sql, N'@finicio DATETIME', @finicio

                -- Operaciones que se realizan en el mes indicado con Entidades
                SET @sql = 'SELECT '
                +'CodigoSucursal = CASE WHEN (@nombre LIKE ''%Carrasco%'') THEN ''001'' ELSE ''002'' END, '
                +'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
                +'ReciboOperacion = O.Recibo, '
                +'MonedaRecibida = CASE WHEN O.Compra = 0 THEN 
                            (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') 
                            ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA) END , '
                +'MonedaEntregada =  CASE WHEN O.Compra = 0 THEN
                            (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = C.CodigoISOA)
                            ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
                +'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
                +'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
                +'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN 
                                                        (CAST(''0'' AS DECIMAL(14,2)))
                                                    ELSE 
                                                        (CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
                                                                                FROM #tablatemporalFixing 
                                                                                WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
                                                                               ) AS MONEY)
                                                                    ,2) AS DECIMAL(14,2)))
                                                END), '
                +'NumeroDocumentoTitularOperacion =  E.CIF, '
                +'NumeroDocumentoRepresentanteLegal = '''' '
                +' FROM '+@bdvieja+'.dbo.OperacionEntidad O '
                +' INNER JOIN '+@bdvieja+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
                +' INNER JOIN '+@bdvieja+'.dbo.ISOACentro C ON LO.CodigoISOACentro = C.IdISOACentro '
                +' INNER JOIN '+@bdvieja+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
                +' WHERE O.Fecha BETWEEN @finicio AND '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' '
                +' AND O.Anulada = 0 ' 
                INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
                EXEC sp_executesql @sql, N'@finicio DATETIME, @nombre NVARCHAR(50)', @finicio, @nombre
            END

            IF @bdNueva IS NOT NULL
            BEGIN
                PRINT 'versión nueva mixta:'+@bdNueva

                -- fixing a ValorUSD de las operaciones que se realizan en el mes indicado
                DELETE FROM #tablatemporalFixing
                SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
                  SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
                  FROM '+@bdNueva+'.dbo.DiarioCierre D
                        INNER JOIN '+@bdNueva+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
                        INNER JOIN '+@bdNueva+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
                  WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin
                        AND I.IdISOA=''USD''
                        AND L.CodigoTipoISOA=0
                        ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
                EXEC sp_executesql @sqlFixing, N'@ffin DATETIME', @ffin

                -- Entidades con las que se hacen operaciones en el mes indicado
                SET @sql = 'SELECT '
                +'CIF = E.CIF, '
                +'Entidad = E.Entidad, '
                +'Direccion = (CASE WHEN ED.Provincia IS NULL THEN '''' WHEN ED.Provincia = '''' THEN '''' ELSE ED.Provincia + '','' END) 
                    + (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END) 
                    + (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END) 
                    + (CASE WHEN E.Piso IS NULL THEN '''' WHEN E.Piso = '''' THEN '''' ELSE E.Piso + '' '' END) 
                    + ISNULL(E.Puerta,'''') '
                +' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
                --+' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
                +' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
                +' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
                +' WHERE O.Fecha BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin '
                +' AND O.CodigoEstadoOperacionEntidad = 1  '
                +' GROUP BY E.CIF, E.Entidad, ED.Provincia, ED.Direccion, ED.Numero, E.Piso, E.Puerta ' 
                INSERT INTO @Entidad (CIF, Entidad, Direccion)
                EXEC sp_executesql @sql, N'@ffin DATETIME', @ffin

                -- Operaciones que se realizan en el mes indicado con Entidades
                SET @sql = 'SELECT '
                +'CodigoSucursal = CASE WHEN (@nombre LIKE ''%UYMVD%'') THEN ''001'' ELSE ''002'' END, '
                +'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,112), '
                +'ReciboOperacion = O.Recibo, '
                +'MonedaRecibida = CASE WHEN O.Compra = 0 THEN 
                            (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') 
                            ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
                +'MonedaEntregada =  CASE WHEN O.Compra = 0 THEN
                            (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
                            ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
                +'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
                +'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
                +'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN 
                                                        (CAST(''0'' AS DECIMAL(14,2)))
                                                    ELSE 
                                                        (CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
                                                                                FROM #tablatemporalFixing 
                                                                                WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
                                                                               ) AS MONEY)
                                                                    ,2) AS DECIMAL(14,2)))
                                                END), '
                +'NumeroDocumentoTitularOperacion =  E.CIF, '
                +'NumeroDocumentoRepresentanteLegal = '''' '
                +' FROM '+@bdNueva+'.dbo.OperacionEntidad O '
                +' INNER JOIN '+@bdNueva+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
                +' INNER JOIN '+@bdNueva+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
                +' INNER JOIN '+@bdNueva+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
                +' WHERE O.Fecha BETWEEN '''+CONVERT(NVARCHAR,@fcambioVN,103)+''' AND @ffin '
                +' AND O.CodigoEstadoOperacionEntidad = 1  '
                INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
                EXEC sp_executesql @sql, N'@ffin DATETIME, @nombre NVARCHAR(50)', @ffin, @nombre
            END
        END
    END
    DELETE FROM @cts WHERE IdCentro = @idct
END

INSERT INTO @cts(IdCentro, Nombre, Bdv, FcambioVN, Bdn, FcambioNM, Bdm)
SELECT IdCentro, Nombre, BaseDato, GlobalCash2010, BaseDatoGCH2010, FechaMulticentro, BaseDatoMulticentro
FROM dbo.Centro
WHERE CodigoPais = @idpais
    AND BaseDatoGCH2010 IS NOT NULL
    AND Productivo = 1

IF EXISTS(SELECT IdCentro FROM @cts WHERE (FcambioNM<=@ffin OR @ffin IS NULL) AND Bdm IS NOT NULL)
BEGIN -- **** VERSIÓN MULTICENTRO ****
    WHILE EXISTS(SELECT IdCentro FROM @cts WHERE Bdm IS NOT NULL AND (FcambioNM<=@ffin OR @ffin IS NULL))
    BEGIN
        PRINT 'versión multicentro:'+ @bdmmulticentro

        SELECT TOP 1 @fcambioNM=FcambioNM, @bdmmulticentro=Bdm FROM @cts WHERE Bdm IS NOT NULL AND (@fcambioNM<=@ffin OR @ffin IS NULL)
        SET @bdmmulticentro = ''+@bdmmulticentro

        -- Fixing a ValorUSD de las operaciones que se realizan en el mes indicado.
        DELETE FROM #tablatemporalFixing
        SET @sqlFixing = 'INSERT INTO #tablatemporalFixing (tempfecha, tempfixing)
          SELECT DISTINCT CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) Fecha, L.Fixing
          FROM '+@bdmmulticentro+'.dbo.DiarioCierre D
                INNER JOIN '+@bdmmulticentro+'.dbo.LineaDiarioCierre L ON L.CodigoDiarioCierre=D.IdDiarioCierre
                INNER JOIN '+@bdmmulticentro+'.dbo.ISOA I ON I.IdISOA=L.CodigoISOA
          WHERE CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102) BETWEEN @finicio AND @ffin
                AND I.IdISOA=''USD''
                AND L.CodigoTipoISOA=0
                AND D.CodigoCentro = '+ @idCentroMulticentro
            + ' ORDER BY CONVERT(datetime, DATEDIFF(d, 0, D.Fecha), 102), L.Fixing '
        EXEC sp_executesql @sqlFixing, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

        -- Entidades con las que se hacen operaciones en el mes indicado (del centro correspondiente).
        SET @sql = 'SELECT '
        +'CIF = E.CIF, '
        +'Entidad = E.Entidad, '
        +'Direccion = (CASE WHEN PR.Provincia IS NULL THEN '''' WHEN PR.Provincia = '''' THEN '''' ELSE PR.Provincia + '','' END) 
            + (CASE WHEN ED.Direccion IS NULL THEN '''' WHEN ED.Direccion = '''' THEN '''' ELSE ED.Direccion + '' '' END) 
            + (CASE WHEN ED.Numero IS NULL THEN '''' WHEN ED.Numero = '''' THEN '''' ELSE ED.Numero + '','' END) 
            + (CASE WHEN ED.Piso IS NULL THEN '''' WHEN ED.Piso = '''' THEN '''' ELSE ED.Piso + '' '' END) 
            + ISNULL(ED.Puerta,'''') '
        +' FROM '+@bdmmulticentro+'.dbo.OperacionEntidad O '
        --+' INNER JOIN '+@bdmmulticentro+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.Provincia PR ON PR.IdProvincia = ED.CodigoProvincia '
        +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
        +' AND O.CodigoEstadoOperacionEntidad = 1  '
        + 'AND ED.CodigoCentro = ' + @idCentroMulticentro
        +' GROUP BY E.CIF, E.Entidad, PR.Provincia, ED.Direccion, ED.Numero, ED.Piso, ED.Puerta ' 

        INSERT INTO @Entidad (CIF, Entidad, Direccion)
        EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME', @finicio, @ffin

        -- Operaciones que se realizan en el mes indicado con Entidades
        SET @sql = 'SELECT '
        +'CodigoSucursal = CASE WHEN (Ce.Centro LIKE ''%MVD%'') THEN ''001'' ELSE ''002'' END, ' 
        +'FechaOperacion = CONVERT(NVARCHAR,O.Fecha,103), '
        +'ReciboOperacion = O.Recibo, '
        +'MonedaRecibida = CASE WHEN O.Compra = 0 THEN 
                    (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') 
                    ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA) END , '
        +'MonedaEntregada =  CASE WHEN O.Compra = 0 THEN
                    (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = LO.CodigoISOA)
                    ELSE (SELECT CodigoLegalUY FROM dbo.ISOA WHERE IdISOA = ''UYU'') END, '
        +'ImporteEnMonedaOriginal = CASE WHEN O.Compra = 0 THEN LO.Compensacion ELSE LO.Importe END , '
        +'ImporteEnMonedaDeDestino = CASE WHEN O.Compra = 0 THEN LO.Importe ELSE LO.Compensacion END , '
        +'ImporteEquivalenteValorUSD = (CASE WHEN ROUND((SELECT TOP 1 tempfixing FROM #tablatemporalFixing WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)),0) = 0 THEN 
                                                (CAST(''0'' AS DECIMAL(14,2)))
                                            ELSE 
                                                (CAST(ROUND(LO.Compensacion / CAST((SELECT TOP 1 tempfixing
                                                                            FROM #tablatemporalFixing 
                                                                            WHERE CONVERT(VARCHAR,O.Fecha,103)=CONVERT(VARCHAR,tempfecha,103)
                                                                           ) AS MONEY)
                                                            ,2) AS DECIMAL(14,2)))
                                        END), '
        +'NumeroDocumentoTitularOperacion =  E.CIF, '
        +'NumeroDocumentoRepresentanteLegal = '''' '
        +' FROM '+@bdmmulticentro+'.dbo.OperacionEntidad O '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.LineaOperacionEntidad LO ON O.IdOperacionEntidad = LO.CodigoOperacionEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.Entidad E ON O.CodigoEntidad = E.IdEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.EntidadDato ED ON ED.CodigoEntidad = E.IdEntidad '
        +' INNER JOIN '+@bdmmulticentro+'.dbo.Centro CE ON CE.IdCentro = ED.CodigoCentro '
        +' WHERE O.Fecha BETWEEN @finicio AND @ffin '
        +' AND O.CodigoEstadoOperacionEntidad = 1  '
        +' AND CE.IdCentro = ' + @idCentroMulticentro
        INSERT INTO @Operacion (CodSucursal, Fecha, Recibo, MonedaIN, MonedaOUT, ImporteIN, ImpDestino, ImporteUSD, NumDocTitOp, NumDocRepLeg)
        EXEC sp_executesql @sql, N'@finicio DATETIME, @ffin DATETIME, @nombre NVARCHAR(50)', @finicio, @ffin, @nombre

        UPDATE @cts SET Bdm=NULL WHERE Bdm=@bdmmulticentro
    END
END

-- Insertamos en @EntidadesLimite la suma de las operaciones, el CIF y el Nombre de las Entidades
INSERT INTO @EntidadesLimite (valorSUM, CIF)
SELECT SUM(ImporteUSD),NumDocTitOp FROM @Operacion
GROUP BY NumDocTitOp
ORDER BY NumDocTitOp

-- Eliminamos todas las operaciones de la tabla @Operacion que pertenezcan a Entidades que no hayan superado el límite
DELETE FROM @Operacion WHERE NumDocTitOp NOT IN (SELECT CIF FROM @EntidadesLimite WHERE valorSUM > 10000)
-- Eliminamos todas las entidades de la tabla @Entidad que no hayan superado el límite
DELETE FROM @Entidad WHERE CIF NOT IN (SELECT CIF FROM @EntidadesLimite WHERE valorSUM > 10000)

INSERT INTO @EntidadResultado(CIF, RegistroEntidad)
SELECT 
    CIF = E.CIF,
    RegistroEntidad = (('ID')
                      +('0596')
                      +('UY')
                      +('RUT')
                      +(E.CIF + SPACE(18-LEN(E.CIF))) --CIF.
                      +('J')
                      +('R')
                      +('65990')
                      +('F')
                      +(SPACE(2)) --vacío
                      +(SPACE(8)) --vacío
                      +(SPACE(20))--vacío
                      +(SPACE(20))--vacío
                      +(SPACE(40))--vacío
                      +(SPACE(20))--Siglas (pendiente).
                      +(E.Entidad + SPACE(80-LEN(E.Entidad))) --Razón Social.
                      +(SPACE(50)) --Nombre Fantasía (pendiente).
                      +(E.Direccion + SPACE(80-LEN(E.Direccion))) -- Dirección (localidad + dirección + piso + puerta).
                      +(SPACE(173))) --vacío
FROM @Entidad E

INSERT INTO @OperacionResultado(CIF, RegistroOperacion)
SELECT 
    CIF = O.NumDocTitOp,
    RegistroOperacion = (('OP') 
                        +('0596')
                        +(O.CodSucursal + SPACE(3-LEN(O.CodSucursal)))-- 001 ó 002
                        +(SPACE(18)) --vacío
                        +(O.Fecha + SPACE(8-LEN(O.Fecha)))        --Fecha de la operación.
                        +(RTRIM(O.Recibo) + SPACE(18-LEN(RTRIM(O.Recibo))))--Nº de comprobante (recibo).
                        +('H10')
                        +(O.MonedaIN + SPACE(4-LEN(O.MonedaIN)))  --Moneda recibida.
                        +(O.MonedaOUT + SPACE(4-LEN(O.MonedaOUT)))--Moneda entregada.
                        +(CAST(O.ImporteIN AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImporteIN AS NVARCHAR(17)))))  --Importe en moneda original.
                        +(CAST(O.ImporteUSD AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImporteUSD AS NVARCHAR(17)))))--Importe en USD.
                        +('UY')
                        +('RUT')
                        +(O.NumDocTitOp + SPACE(18-LEN(O.NumDocTitOp)))--Nº documento del titular de la operación (CIF).
                        +('UY')
                        +('IDE')
                        --+(O.NumDocRepLeg + SPACE(18-LEN(O.NumDocRepLeg)))--Nº documento de quien realizó la operación (representante legal).
                        +(SPACE(18)) --Hasta saber qué campo será el nº documento del representante legal, se deja en blanco.
                        +(SPACE(240))--vacío
                        +(SPACE(80)) --vacío
                        +(SPACE(30)) --vacío
                        +(SPACE(15)) --vacío
                        +(SPACE(2))  --vacío
                        +(CAST(O.ImpDestino AS NVARCHAR(17)) + SPACE(17-LEN(CAST(O.ImpDestino AS NVARCHAR(17))))) --Importe de destino.
                        +('S')
                        +('S'))
FROM @Operacion O
ORDER BY O.Fecha

--Número de Registros (para el Registro de Fin).
SET @ContadorRegistros = (SELECT COUNT(A.CIF) FROM (SELECT DISTINCT CIF FROM @EntidadResultado)A) + (SELECT COUNT(CIF) FROM @OperacionResultado)

--Registro Cabezal
INSERT INTO @Resultado VALUES ('CB'+'0596'+CAST(@aniomes AS CHAR(6))+SPACE(518))

WHILE EXISTS (SELECT 1 FROM @EntidadesLimite)
BEGIN
    SELECT TOP 1 @cifResultado = CIF FROM @EntidadesLimite ORDER BY CIF

    --Registro de Persona Jurídica
    INSERT INTO @Resultado
    SELECT TOP 1 E.RegistroEntidad FROM @EntidadResultado E
    WHERE E.CIF = @cifResultado
    --INSERT INTO @Resultado VALUES (CHAR(13)+CHAR(10))
    --Registro de Operaciones para Personas Jurídicas
    INSERT INTO @Resultado
    SELECT O.RegistroOperacion FROM @OperacionResultado O
    WHERE O.CIF = @cifResultado

    --INSERT INTO @Resultado VALUES (CHAR(13)+CHAR(10))

    DELETE FROM @EntidadesLimite  WHERE CIF = @cifResultado
END

--Registro de Fin
INSERT INTO @Resultado VALUES ('UL'+'0596'+CAST(@aniomes AS CHAR(6))+CAST(@ContadorRegistros AS CHAR(7))+SPACE(511))

SELECT * FROM @Resultado

--SELECT STUFF((SELECT CAST('#' AS varchar(MAX)) + A.Resultado  
--            FROM @Resultado   A
--FOR XML PATH('')), 1, 1, '') as Resultado



DROP TABLE #TablaTemporalFixing
SET NOCOUNT OFF;
END

我该怎么做才能从结果中替换“。” 通过“,”在结果中例如这里 48.88。谢谢

4

2 回答 2

1

里面的代码太多了。我在到达底部之前感到无聊。只发布相关部分。

如果它是您所追求的直接替换,请使用替换语句REPLACE(value, '.', ',')

http://msdn.microsoft.com/en-us/library/ms186862.aspx

于 2013-06-23T08:38:42.590 回答
0

您可以在存储过程结束时使用替换功能

SELECT * FROM REPLACE(@Resultado,'.',',')
于 2013-07-02T05:53:22.057 回答