2017-08-14 252 views
0

我在做一個數據倉庫,我需要填補我的事實表,這是我的查詢,但是當我運行的代碼返回此錯誤:錯誤與我的事實表:數字轉換爲數據類型爲varchar

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

有人知道如何解決它嗎?

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

什麼是SoftlandERP.CORSARIO.FACTURA_LINEA.FECHA_FACTURA的精度?我認爲這是一個數字/十進制數據類型? –

+0

來自FACTURA_LINEA的FECHA_FACTURA有日期時間 –

+0

如果在轉換爲VARCHAR(MAX)時更改VARCHAR(10),是否仍然收到此錯誤? –

回答

1

我會盡力幫助你以不同的方式。我在這裏創建了一些SQL語句,並且我需要知道執行過程中的每個失敗。

如果它們都工作,我們需要創建SQL語句來逐字段地插入來發現問題所在。找出問題並不是更好的技術,但最容易幫助你。

首先

--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)) 

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)) 

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)) 

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)) 

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)) 

第六

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)) 

第七

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)) 

第八

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)) 
相關問題