2017-08-14 1 views
0

Je fais un datawarehouse et je dois remplir ma table de fait, c'est ma requête, mais quand je lance le code renvoie cette erreur:erreur avec ma table de fait: la conversion numérique de type de données varchar

Msg 8115, Level 16, State 5, Line 98
Arithmetic overflow error converting numeric to data type varchar.

Est-ce que quelqu'un sait comment le résoudre?

enter image description here

enter image description here

enter image description here

CORSARIO.FACTURA_LINEA_01

CORSARIO.FACTURA_LINEA_02

CORSARIO.FACTURA_01

CORSARIO.FACTURA_02

CORSARIO.FACTURA_03


INSERT INTO dbo.Hechos_Ventas 
    SELECT  
     DA.COD_ARTKEY, DT.COD_FECHAKEY, 
     DZ.COD_ZONAKEY, DC.COD_IDKEY, FL.FACTURA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_UNITARIO * - 1 
       ELSE fl.PRECIO_UNITARIO 
     END AS PRECIO_UNITARIO, 
     CONVERT(VARCHAR(10), FL.FECHA_FACTURA, 101) AS FECHA_FACT, 
     F.TIPO_DOCUMENTO, F.TIPO_CAMBIO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.DESC_TOT_LINEA * - 1 
       ELSE fl.DESC_TOT_LINEA 
     END AS DESCUENTO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.CANTIDAD * - 1 
       ELSE fl.cantidad 
     END AS CANTIDAD, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.TOTAL_IMPUESTO1 * - 1 
       ELSE fl.TOTAL_IMPUESTO1 
     END AS IVA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.COSTO_TOTAL_LOCAL * -1 
       ELSE FL.COSTO_TOTAL_LOCAL 
     END AS COSTO_TOTAL_LOCAL, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END AS PRECIO_TOTAL, 
     --GANANCIA 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END - CASE 
       WHEN f.tipo_documento = 'D' 
        THEN FL.COSTO_TOTAL_LOCAL * -1 
        ELSE FL.COSTO_TOTAL_LOCAL 
       END AS GANANCIA 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    INNER JOIN 
     DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    INNER JOIN 
     DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    INNER JOIN 
     DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 
+0

Quelle est la précision de SoftlandERP.CORSARIO.FACTURA_LINEA.FECHA_FACTURA? Je suppose que c'est un type de données numérique/décimal? –

+0

FECHA_FACTURA de FACTURA_LINEA a datetime –

+0

Si vous modifiez le VARCHAR (10) dans votre convertir en VARCHAR (MAX) recevez-vous toujours cette erreur? –

Répondre

1

Je vais essayer de vous aider d'une manière différente. J'ai créé ici quelques instructions SQL, et j'ai besoin de connaître chaque échec de l'exécution.

Si tous fonctionnent, nous devons créer des instructions SQL pour insérer champ par champ afin de découvrir où se situe le problème. Ce n'est pas la meilleure technique pour identifier le problème, mais le plus facile à vous aider.

Première

--INSERT INTO dbo.Hechos_Ventas 
    SELECT  
     DA.COD_ARTKEY, DT.COD_FECHAKEY, 
     DZ.COD_ZONAKEY, DC.COD_IDKEY, FL.FACTURA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_UNITARIO * - 1 
       ELSE fl.PRECIO_UNITARIO 
     END AS PRECIO_UNITARIO, 
     CONVERT(VARCHAR(10), FL.FECHA_FACTURA, 101) AS FECHA_FACT, 
     F.TIPO_DOCUMENTO, F.TIPO_CAMBIO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.DESC_TOT_LINEA * - 1 
       ELSE fl.DESC_TOT_LINEA 
     END AS DESCUENTO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.CANTIDAD * - 1 
       ELSE fl.cantidad 
     END AS CANTIDAD, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.TOTAL_IMPUESTO1 * - 1 
       ELSE fl.TOTAL_IMPUESTO1 
     END AS IVA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.COSTO_TOTAL_LOCAL * -1 
       ELSE FL.COSTO_TOTAL_LOCAL 
     END AS COSTO_TOTAL_LOCAL, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END AS PRECIO_TOTAL, 
     --GANANCIA 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END - CASE 
       WHEN f.tipo_documento = 'D' 
        THEN FL.COSTO_TOTAL_LOCAL * -1 
        ELSE FL.COSTO_TOTAL_LOCAL 
       END AS GANANCIA 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    INNER JOIN 
     DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    INNER JOIN 
     DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    INNER JOIN 
     DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Deuxième

SELECT  
    * 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    --INNER JOIN 
    -- DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    --INNER JOIN 
    -- DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    --INNER JOIN 
    -- DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    --INNER JOIN 
    -- DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Troisième

SELECT  
    * 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    --INNER JOIN 
    -- DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    --INNER JOIN 
    -- DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    --INNER JOIN 
    -- DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Quatrième

SELECT  
* 
FROM    
    SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
INNER JOIN 
    SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
INNER JOIN 
    DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
INNER JOIN 
    DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
--INNER JOIN 
-- DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
--INNER JOIN 
-- DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
WHERE   
    (F.ANULADA = 'N') 
    AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Cinquième

SELECT  
    * 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    INNER JOIN 
     DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    INNER JOIN 
     DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    --INNER JOIN 
    -- DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Sixième

SELECT  
* 
FROM    
    SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
INNER JOIN 
    SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
INNER JOIN 
    DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
INNER JOIN 
    DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
INNER JOIN 
    DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
INNER JOIN 
    DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
WHERE   
    (F.ANULADA = 'N') 
    AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Septième

SELECT  
     --DA.COD_ARTKEY, DT.COD_FECHAKEY, 
     --DZ.COD_ZONAKEY, DC.COD_IDKEY, FL.FACTURA, 
     --CASE 
     -- WHEN f.tipo_documento = 'D' 
     --  THEN FL.PRECIO_UNITARIO * - 1 
     --  ELSE fl.PRECIO_UNITARIO 
     --END AS PRECIO_UNITARIO, 
     --CONVERT(VARCHAR(10), FL.FECHA_FACTURA, 101) AS FECHA_FACT, 
     --F.TIPO_DOCUMENTO, F.TIPO_CAMBIO, 
     --CASE 
     -- WHEN f.tipo_documento = 'D' 
     --  THEN FL.DESC_TOT_LINEA * - 1 
     --  ELSE fl.DESC_TOT_LINEA 
     --END AS DESCUENTO, 
     --CASE 
     -- WHEN f.tipo_documento = 'D' 
     --  THEN FL.CANTIDAD * - 1 
     --  ELSE fl.cantidad 
     --END AS CANTIDAD, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.TOTAL_IMPUESTO1 * - 1 
       ELSE fl.TOTAL_IMPUESTO1 
     END AS IVA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.COSTO_TOTAL_LOCAL * -1 
       ELSE FL.COSTO_TOTAL_LOCAL 
     END AS COSTO_TOTAL_LOCAL, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END AS PRECIO_TOTAL, 
     --GANANCIA 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_TOTAL * - 1 
       ELSE fl.PRECIO_TOTAL 
     END - CASE 
       WHEN f.tipo_documento = 'D' 
        THEN FL.COSTO_TOTAL_LOCAL * -1 
        ELSE FL.COSTO_TOTAL_LOCAL 
       END AS GANANCIA 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    INNER JOIN 
     DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    INNER JOIN 
     DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    INNER JOIN 
     DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017)) 

Huitième

SELECT  
     DA.COD_ARTKEY, DT.COD_FECHAKEY, 
     DZ.COD_ZONAKEY, DC.COD_IDKEY, FL.FACTURA, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.PRECIO_UNITARIO * - 1 
       ELSE fl.PRECIO_UNITARIO 
     END AS PRECIO_UNITARIO, 
     CONVERT(VARCHAR(10), FL.FECHA_FACTURA, 101) AS FECHA_FACT, 
     F.TIPO_DOCUMENTO, F.TIPO_CAMBIO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.DESC_TOT_LINEA * - 1 
       ELSE fl.DESC_TOT_LINEA 
     END AS DESCUENTO, 
     CASE 
      WHEN f.tipo_documento = 'D' 
       THEN FL.CANTIDAD * - 1 
       ELSE fl.cantidad 
     END AS CANTIDAD 

     --CASE 
    --  WHEN f.tipo_documento = 'D' 
    --   THEN FL.TOTAL_IMPUESTO1 * - 1 
    --   ELSE fl.TOTAL_IMPUESTO1 
    -- END AS IVA, 
    -- CASE 
    --  WHEN f.tipo_documento = 'D' 
    --   THEN FL.COSTO_TOTAL_LOCAL * -1 
    --   ELSE FL.COSTO_TOTAL_LOCAL 
    -- END AS COSTO_TOTAL_LOCAL, 
    -- CASE 
    --  WHEN f.tipo_documento = 'D' 
    --   THEN FL.PRECIO_TOTAL * - 1 
    --   ELSE fl.PRECIO_TOTAL 
    -- END AS PRECIO_TOTAL, 
    -- --GANANCIA 
    -- CASE 
    --  WHEN f.tipo_documento = 'D' 
    --   THEN FL.PRECIO_TOTAL * - 1 
    --   ELSE fl.PRECIO_TOTAL 
    -- END - CASE 
    --   WHEN f.tipo_documento = 'D' 
    --    THEN FL.COSTO_TOTAL_LOCAL * -1 
    --    ELSE FL.COSTO_TOTAL_LOCAL 
    --   END AS GANANCIA 
    FROM    
     SoftlandERP.CORSARIO.FACTURA_LINEA AS FL 
    INNER JOIN 
     SoftlandERP.CORSARIO.FACTURA AS F ON F.FACTURA = FL.FACTURA 
    INNER JOIN 
     DIMENSION_ARTICULO DA ON DA.COD_ARTICULO = FL.ARTICULO 
    INNER JOIN 
     DIMENSION_TIEMPO DT ON DT.FECHA = F.FECHA 
    INNER JOIN 
     DIMENSION_CLIENTE DC ON DC.ID_CLIENTE = F.CLIENTE 
    INNER JOIN 
     DIMENSION_ZONA DZ ON DZ.COD_ZONA = F.ZONA COLLATE DATABASE_DEFAULT 
    WHERE   
     (F.ANULADA = 'N') 
     AND (YEAR(FL.FECHA_FACTURA) IN (2015, 2016, 2017))