Buenas a todos los integrantes del Foro!!!
Tengo un problema en una Tabla de una Base de Datos que me está triplicando el ingreso de los Datos a través de una Consulta.
La situación es la siguiente, tengo una BD que tiene varias Tablas, entre ellas hay tres Tablas que son las principales; Clientes - RelCteProd y Productos.
En las mismas se realizan Altas masivas y para ello hago un Insert en cada una de ellas. l tema es que en la Tabla Clientes y Productos cuando realizo el Insert me triplica los datos.
En el Modelo de Datos se crearon las Relaciones entre las Tablas para evitar Clientes duplicados y/o Productos duplicados.
He controlado todos los Desencadenadores y NO puedo encontrar el que me controle los INSERT.
Alguna sugerencia o colaboración para detectar el problema...???
Aqui los paso los Script de las Tablas en cuestión y los Desencadenadores.
Muchas Gracias.-
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Movimientos_Clientes_Clientes]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Movimientos_Clientes] DROP CONSTRAINT FK_Movimientos_Clientes_Clientes
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_RelCteProd_Clientes]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[RelCteProd] DROP CONSTRAINT FK_RelCteProd_Clientes
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Movimientos_Productos_Productos]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Movimientos_Productos] DROP CONSTRAINT FK_Movimientos_Productos_Productos
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_RelCteProd_Productos]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[RelCteProd] DROP CONSTRAINT FK_RelCteProd_Productos
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Clientes_UTrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Clientes_UTrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Clientes_ITrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Clientes_ITrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Clientes_DTrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Clientes_DTrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Productos_UTrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Productos_UTrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Productos_ITrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Productos_ITrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Productos_DTrig]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[Productos_DTrig]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Clientes]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Clientes]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[RelCteProd]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[RelCteProd]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Productos]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Productos]
GO
CREATE TABLE [dbo].[Clientes] (
[Id_Cliente] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[TipoDoc] [smallint] NOT NULL ,
[NroDocumento] [numeric](18, 0) NOT NULL ,
[Apellido] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Nombre] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Nro_Cliente] [numeric](18, 0) NULL ,
[FechaAlta_Cliente] [datetime] NULL ,
[FechaBaja_Cliente] [datetime] NULL ,
[FechaProceso_Cliente] [datetime] NULL ,
[upsize_ts] [timestamp] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[RelCteProd] (
[Id_Cliente] [numeric](18, 0) NOT NULL ,
[Id_Produto] [numeric](18, 0) NOT NULL ,
[Sucursal] [int] NULL ,
[TipoProducto] [smallint] NULL ,
[Clave1] [numeric](18, 0) NULL ,
[Clave2] [numeric](18, 0) NULL ,
[TipoDoc] [smallint] NULL ,
[NroDocumento] [numeric](18, 0) NULL ,
[upsize_ts] [timestamp] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Productos] (
[Id_Producto] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[Sucursal] [int] NOT NULL ,
[TipoProducto] [smallint] NOT NULL ,
[Clave1] [numeric](18, 0) NULL ,
[Clave2] [numeric](18, 0) NULL ,
[Clave3] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Clave4] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Producto] [numeric](18, 0) NULL ,
[FechaAlta_Producto] [datetime] NULL ,
[FechaBaja_Producto] [datetime] NULL ,
[FechaProceso_Producto] [datetime] NULL ,
[upsize_ts] [timestamp] NULL
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER "Clientes_UTrig" ON dbo.Clientes FOR UPDATE AS
SET NOCOUNT ON
/* * REGLA DE VALIDACIÓN DEL CAMPO 'NroDocumento' */
IF (SELECT Count(*) FROM inserted WHERE NOT (NroDocumento>0)) > 0
BEGIN
RAISERROR 44444 'El campo "Nro. de Documento" debe contener datos'
ROLLBACK TRANSACTION
END
ELSE
/* * REGLA DE VALIDACIÓN DEL CAMPO 'Apellido' */
IF (SELECT Count(*) FROM inserted WHERE NOT (Apellido Is Not Null And Apellido>' ')) > 0
BEGIN
RAISERROR 44444 'El campo "Apellido" debe contener datos'
ROLLBACK TRANSACTION
END
ELSE
/* * REGLA DE VALIDACIÓN DEL CAMPO 'Caja' */
IF (SELECT Count(*) FROM inserted WHERE NOT (Caja Is Not Null)) > 0
BEGIN
RAISERROR 44444 'El campo "Caja" debe contener un valor'
ROLLBACK TRANSACTION
END
ELSE
/* * REGLA DE VALIDACIÓN DEL CAMPO 'Orden' */
IF (SELECT Count(*) FROM inserted WHERE NOT (Orden Is Not Null)) > 0
BEGIN
RAISERROR 44444 'El campo "Orden" debe contener un valor'
ROLLBACK TRANSACTION
END
ELSE
/* * REGLA DE VALIDACIÓN DEL CAMPO 'Ubicacion' */
IF (SELECT Count(*) FROM inserted WHERE NOT (Ubicacion Is Not Null)) > 0
BEGIN
RAISERROR 44444 'El campo "Ubicación" debe contener un valor'
ROLLBACK TRANSACTION
END
ELSE
/* * REGLA DE VALIDACIÓN DEL CAMPO 'Observacion' */
IF (SELECT Count(*) FROM inserted WHERE NOT (Observacion Is Not Null)) > 0
BEGIN
RAISERROR 44444 'El campo "Observación" debe contener un valor'
ROLLBACK TRANSACTION
END
/* * EXTENDER ACTUALIZACIONES EN CASCADA A 'Movimientos_Clientes' */
IF UPDATE(TipoDoc) OR UPDATE(NroDocumento)
BEGIN
UPDATE Movimientos_Clientes
SET Movimientos_Clientes.TipoDoc = inserted.TipoDoc , Movimientos_Clientes.NroDocumento = inserted.NroDocumento
FROM Movimientos_Clientes, deleted, inserted
WHERE deleted.TipoDoc = Movimientos_Clientes.TipoDoc AND deleted.NroDocumento = Movimientos_Clientes.NroDocumento
END
/* * IMPEDIR ACTUALIZACIONES SI NO HAY NINGUNA CLAVE COINCIDENTE EN 'Oficinas' */
IF UPDATE(CodOficina)
BEGIN
IF (SELECT COUNT(*) FROM inserted) !=
(SELECT COUNT(*) FROM Oficinas, inserted WHERE (Oficinas.CodOficina = inserted.CodOficina))
BEGIN
RAISERROR 44446 'No puede agregarse ni modificarse el registro. Las reglas de integridad referencial requieren un registro relacionado en la tabla ''Oficinas''.'
ROLLBACK TRANSACTION
END
END