我正在做一个数据仓库,我需要填写我的事实表,这是我的查询但是当我运行代码时返回此错误:
Msg 8115,Level 16,State 5,Line 98
将数值转换为数据类型varchar的算术溢出错误。
有人知道如何解决它吗?
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 :(得分: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))