提问人:Diego_Alonso 提问时间:11/15/2023 最后编辑:Diego_Alonso 更新时间:11/17/2023 访问量:41
错误:在 Carga Tabla Hecho 0xC0209029,OLE DB 目标 [2]:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。The "OLE DB Destination.In
Error: 0xC0209029 at Carga Tabla Hecho, OLE DB Destination [2]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "OLE DB Destination.In
问:
对于之前的问题,我深表歉意;我希望现在好多了。这是我在 ETL 项目中面临的问题:在表中,当使用 isnull 并将其设置为 0 时,它给了我这个问题。显然,如果我使用任何其他数字,例如 1(这是一个现有示例),它会在激活“检查约束”选项的情况下运行而不会出现问题。
这是日志提供的错误。
错误:在 Carga Tabla Hecho 0xC0202009,OLE DB 目标 [2]:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。
OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“语句已终止。
OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“INSERT 语句与 FOREIGN KEY 约束”fk_facventas_dimempleados“冲突。冲突发生在数据库“BikeZ_DW”的表“dbo.dimempleados”,列“iddimempleado”中。
代码查询。
SELECT
temp.DetalleVentaID, t.iddimtiempo, c.iddimcliente,
ISNULL(iddimempleado,0) AS iddimempleado, te.iddimterritorio,
p.iddimproducto, temp.Cantidad, temp.PrecioUnitario
FROM
(SELECT
d.DetalleVentaID, cantidad, precioUnitario, fecha,
clienteID, COALESCE(vendedorID,0) AS vendedor_ID,
v.territorioID, ProductoID
FROM
ventas v
JOIN
DetalleVentas d ON (v.ventaid = d.ventaid)) temp
JOIN
BikeZ_DW.dbo.dimtiempo t ON (temp.fecha = t.fecha)
JOIN
BikeZ_DW.dbo.dimcliente c ON (temp.clienteID = c.idcliente)
LEFT JOIN
BikeZ_DW.dbo.dimempleados e ON (temp.vendedor_ID = e.idempleado)
JOIN
BikeZ_DW.dbo.dimterritorio te ON (temp.territorioID = te.idterritorio)
JOIN
BikeZ_DW.dbo.dimproducto p ON (temp.productoID = P.IDPRODUCTO)
DW 数据库的部分代码。
CREATE TABLE dimempleados (
iddimempleado INT IDENTITY(1,1) NOT NULL,
idempleado INT NOT NULL,
genero VARCHAR(1) NULL
PRIMARY KEY (iddimempleado) );
CREATE TABLE facventas (
idfactventas INT IDENTITY(1,1) NOT NULL,
monto Money NULL,
cantidad INT NULL,
dimtiempo_iddimtiempo INT NOT NULL,
dimempleados_iddimempleado INT NOT NULL,
dimproducto_iddimproducto INT NOT NULL,
dimterritorio_iddimterritorio INT NOT NULL,
dimcliente_iddimcliente INT NOT NULL,
PRIMARY KEY (idfactventas,dimempleados_iddimempleado,dimterritorio_iddimterritorio, dimcliente_iddimcliente, dimproducto_iddimproducto, dimtiempo_iddimtiempo)
);
ALTER TABLE facventas
ADD CONSTRAINT fk_facventas_dimempleados
FOREIGN KEY (dimempleados_iddimempleado)
REFERENCES dimempleados(iddimempleado)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
答:
基于 AlwaysLearning 观察,当找不到员工 ID 时,ISNULL 检查将生成零。事实数据表 (ventas) 和维度 (empleados) 之间有一个外键引用。
员工维度的定义指定它是在 1 处播种的身份。因此,您需要确保有一个未知的成员。类似的东西
-- Add our unknown member if it does not already exist
SET IDENTITY_INSERT dbo.dimempleados ON;
INSERT INTO
dbo.dimempleados(iddimempleado, idempleado, genero)
SELECT X.*
FROM
(
VALUES(0, 0, 'U')
)AS X(iddimempleado, idempleado, genero)
WHERE
NOT EXISTS
(
SELECT *
FROM dbo.dimempleados AS D
WHERE D.idempleados = X.idempleados
);
SET IDENTITY_INSERT dbo.dimepleados OFF;
我会在包的开头有一个执行SQL任务,以确保未知成员存在,并且它将运行如上所述的幂等语句。
下一个:从 ADF 迁移到 SSIS
评论
iddimempleado