我的事实表出错:将数字转换为数据类型varchar

时间:2017-08-14 19:38:49

标签: sql-server data-warehouse

我正在做一个数据仓库,我需要填写我的事实表,这是我的查询但是当我运行代码时返回此错误:

  

Msg 8115,Level 16,State 5,Line 98
  将数值转换为数据类型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))

1 个答案:

答案 0 :(得分: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))