ERROR: Instrucción INSERT en conflicto con la restricción FOREIGN KEY
Publicado por miguel_antonio (7 intervenciones) el 28/06/2012 08:50:17
SALUDOS, BUENO, NOSE SI PODRIAn ORIENTARME PORFAVOR, TRABAJO CON VISUAL STUDIO 2008 Y SQL SERVER 2008. LES AGRADEZCO DE ANTEMANO.
ESTOY TRABAJANDO CON PROCEDIMIENTOS ALMACENADOS:
ESTABA BUSCANDO INFORMACION DE COMO :
HACER UN INSERT EN LA TABLA LLAMADA "AMORTIZACION" Y QUE ESTÁ RELACIONADA:
NOTA: EL PRIMARY KEY ES AUTOGENERADO
CREATE TABLE amortizacion
(
idamor INT IDENTITY,
idcom INT NOT NULL,
amortizacion DECIMAL(12,2),
saldo DECIMAL(12,2),
total DECIMAL(12,2),
fecha SMALLDATETIME
CONSTRAINT PK_amortizacion_idamor PRIMARY KEY(idamor),
CONSTRAINT FK_amortizacion_idcom FOREIGN KEY (idcom) REFERENCES compra_encabezado(idcom)
)
QUE VA RELACIONADA AL ENCABEZADO DE COMPRA Y EL DETALLE RELACIONADO A LA COMPRA Y A LA VEZ QUIERO ACTUALIZAR EL ARTICULO EN LA BASE DE DATOS.
MI CODIGO DE GUARDAR EL ENCABEZADO ES ESTE, LA CUAL NO ME GENERA NINGUN ERROR:
ALTER PROCEDURE [dbo].[Sp_GuardarCompraEncabezado]
(
@codcom INT,
@serie INT,
@codprov INT=NULL,
@codper INT,
@t_comp VARCHAR(100),
@f_pago VARCHAR(100),
@t_moneda VARCHAR(100),
@t_cambio DECIMAL(12,3),
@hora VARCHAR(13)=NULL,
@f_emision SMALLDATETIME=NULL,
@subtotal DECIMAL(12,2),
@igv DECIMAL(12,2),
@total DECIMAL(12,2),
@observaciones VARCHAR(200),
@estado VARCHAR(1)
)
AS
IF EXISTS(SELECT * FROM compra_encabezado
WHERE CONVERT(VARCHAR,idcom)+', '+CONVERT(VARCHAR,serie) = CONVERT(VARCHAR,@codcom)+', '+CONVERT(VARCHAR,@serie)
AND estado='H')
BEGIN
SELECT 'La Compra "'+CONVERT(VARCHAR,@serie)+','+CONVERT(VARCHAR,@codcom)+'" ya ha sido Generada y Registrada, se cancela la accin!...'
END
ELSE BEGIN
INSERT INTO compra_encabezado
(
idcom,
serie,
idprov,
idper,
tipo_comprobante,
forma_pago,
tipo_moneda,
tipo_cambio,
hora,
f_emision,
subtotal,
igv,
total,
observaciones,
estado
)
VALUES
(
@codcom,
@serie,
@codprov,
@codper,
@t_comp,
@f_pago,
@t_moneda,
@t_cambio,
@hora,
@f_emision,
@subtotal,
@igv,
@total,
@observaciones,
@estado
)
END
MI CODIGO DE GUARDAR EL DETALLE ES ESTE:
LA CUAL NO ME GENERA UN ERROR
ALTER PROCEDURE [dbo].[Sp_GuardarCompraDetalle]
(
@codcom INT,
@codart INT=Null,
@cantidad INT=Null,
@pventa DECIMAL(12,2)=Null,
@importe DECIMAL(12,2)=Null
)
AS
INSERT INTO compra_detalle(idcom,idart,cantidad,p_venta,importe)
VALUES(@codcom,@codart,@cantidad,@pventa,@importe)
UPDATE articulo SET stock_unid = stock_unid - @cantidad WHERE idart=@codart
ESTE ES EL CODIGO DE GUARDAR AMORTIZACION
ALTER PROCEDURE [dbo].[Sp_GuardarAmortizacion]
(
@codamor INT OUTPUT,
@codcom INT,
@amortizacion DECIMAL(12,2),
@saldo DECIMAL(12,2),
@total DECIMAL(12,2),
@fecha SMALLDATETIME
)
AS
INSERT INTO amortizacion(idcom,
amortizacion,
saldo,
total,
fecha)
VALUES(@codcom,
@amortizacion,
@saldo,
@total,
@fecha);
SELECT @codamor = SCOPE_IDENTITY()
RETURN
ACA ME SALE EL ERROR CUANDO QUIERO INSERTAR (ESTA OPCION SOLO SE VA A DAR CUANDO COMPRO AL "CRÉDTO").
LO PROBÉ EN SQL Y ME SALE ESTE CONFLICTO:
Mens. 547, Nivel 16, Estado 0, Lnea 1
Instrucción INSERT en conflicto con la restricción FOREIGN KEY "FK_amortizacion_idcom".
El conflicto ha aparecido en la base de datos "bd_centrofarma",
tabla "dbo.compra_encabezado",
column 'idcom'.
Se terminó la instrucción.
ESTOY TRABAJANDO CON PROCEDIMIENTOS ALMACENADOS:
ESTABA BUSCANDO INFORMACION DE COMO :
HACER UN INSERT EN LA TABLA LLAMADA "AMORTIZACION" Y QUE ESTÁ RELACIONADA:
NOTA: EL PRIMARY KEY ES AUTOGENERADO
CREATE TABLE amortizacion
(
idamor INT IDENTITY,
idcom INT NOT NULL,
amortizacion DECIMAL(12,2),
saldo DECIMAL(12,2),
total DECIMAL(12,2),
fecha SMALLDATETIME
CONSTRAINT PK_amortizacion_idamor PRIMARY KEY(idamor),
CONSTRAINT FK_amortizacion_idcom FOREIGN KEY (idcom) REFERENCES compra_encabezado(idcom)
)
QUE VA RELACIONADA AL ENCABEZADO DE COMPRA Y EL DETALLE RELACIONADO A LA COMPRA Y A LA VEZ QUIERO ACTUALIZAR EL ARTICULO EN LA BASE DE DATOS.
MI CODIGO DE GUARDAR EL ENCABEZADO ES ESTE, LA CUAL NO ME GENERA NINGUN ERROR:
ALTER PROCEDURE [dbo].[Sp_GuardarCompraEncabezado]
(
@codcom INT,
@serie INT,
@codprov INT=NULL,
@codper INT,
@t_comp VARCHAR(100),
@f_pago VARCHAR(100),
@t_moneda VARCHAR(100),
@t_cambio DECIMAL(12,3),
@hora VARCHAR(13)=NULL,
@f_emision SMALLDATETIME=NULL,
@subtotal DECIMAL(12,2),
@igv DECIMAL(12,2),
@total DECIMAL(12,2),
@observaciones VARCHAR(200),
@estado VARCHAR(1)
)
AS
IF EXISTS(SELECT * FROM compra_encabezado
WHERE CONVERT(VARCHAR,idcom)+', '+CONVERT(VARCHAR,serie) = CONVERT(VARCHAR,@codcom)+', '+CONVERT(VARCHAR,@serie)
AND estado='H')
BEGIN
SELECT 'La Compra "'+CONVERT(VARCHAR,@serie)+','+CONVERT(VARCHAR,@codcom)+'" ya ha sido Generada y Registrada, se cancela la accin!...'
END
ELSE BEGIN
INSERT INTO compra_encabezado
(
idcom,
serie,
idprov,
idper,
tipo_comprobante,
forma_pago,
tipo_moneda,
tipo_cambio,
hora,
f_emision,
subtotal,
igv,
total,
observaciones,
estado
)
VALUES
(
@codcom,
@serie,
@codprov,
@codper,
@t_comp,
@f_pago,
@t_moneda,
@t_cambio,
@hora,
@f_emision,
@subtotal,
@igv,
@total,
@observaciones,
@estado
)
END
MI CODIGO DE GUARDAR EL DETALLE ES ESTE:
LA CUAL NO ME GENERA UN ERROR
ALTER PROCEDURE [dbo].[Sp_GuardarCompraDetalle]
(
@codcom INT,
@codart INT=Null,
@cantidad INT=Null,
@pventa DECIMAL(12,2)=Null,
@importe DECIMAL(12,2)=Null
)
AS
INSERT INTO compra_detalle(idcom,idart,cantidad,p_venta,importe)
VALUES(@codcom,@codart,@cantidad,@pventa,@importe)
UPDATE articulo SET stock_unid = stock_unid - @cantidad WHERE idart=@codart
ESTE ES EL CODIGO DE GUARDAR AMORTIZACION
ALTER PROCEDURE [dbo].[Sp_GuardarAmortizacion]
(
@codamor INT OUTPUT,
@codcom INT,
@amortizacion DECIMAL(12,2),
@saldo DECIMAL(12,2),
@total DECIMAL(12,2),
@fecha SMALLDATETIME
)
AS
INSERT INTO amortizacion(idcom,
amortizacion,
saldo,
total,
fecha)
VALUES(@codcom,
@amortizacion,
@saldo,
@total,
@fecha);
SELECT @codamor = SCOPE_IDENTITY()
RETURN
ACA ME SALE EL ERROR CUANDO QUIERO INSERTAR (ESTA OPCION SOLO SE VA A DAR CUANDO COMPRO AL "CRÉDTO").
LO PROBÉ EN SQL Y ME SALE ESTE CONFLICTO:
Mens. 547, Nivel 16, Estado 0, Lnea 1
Instrucción INSERT en conflicto con la restricción FOREIGN KEY "FK_amortizacion_idcom".
El conflicto ha aparecido en la base de datos "bd_centrofarma",
tabla "dbo.compra_encabezado",
column 'idcom'.
Se terminó la instrucción.
Valora esta pregunta


0