Fórum A instrução INSERT conflitou com a restrição do FOREIGN KEY #571654
27/11/2016
0
Boa noite,
Estou com o seguinte problema ao inserir o comando abaixo:
INSERT INTO COMPRA_FORNECEDOR VALUES
(20,1,1,'87548578347584',GETDATE(),5,2000)
vem o erro:
A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK__COMPRA_FORNECEDO__239E4DCF". O conflito ocorreu no banco de dados "LOJADENOTEBOOK", tabela "dbo.LOJA_PRODUTO".
Alguém poderia me ajudar? Segue abaixo a database criada.
CREATE DATABASE LOJADENOTEBOOK
USE LOJADENOTEBOOK
DROP DATABASE LOJADENOTEBOOK
CREATE TABLE CLIENTE (
CPF_CNPJ VARCHAR(14) NOT NULL,
NOME_COMPLETO VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
PRIMARY KEY(CPF_CNPJ)
);
INSERT INTO CLIENTE VALUES
('12345678901234', 'EMPRESA SOCIAL LIMITADA DE SÃO PAULO', 'LIMITADASAOPAULO@HOTMAIL.COM'),
('123.444.543-45', 'ALEXANDRE SANTOS DA RAVIEIRA', 'ALEXANDRE@HOTMAIL.COM'),
('09876543211234', 'EMPRESA SOCIAL LIMITADA DE SANTOS', 'LIMITADASANTOS@HOTMAIL.COM'),
('72374672346723', 'EMPRESA SOCIAL LIMITADA DE BAURU', 'LIMITADABAURU@HOTMAIL.COM'),
('345.654.456-65', 'MIKE SANTORIO ALVES', 'MIKESANTORIO@HOTMAIL.COM');
SELECT * FROM CLIENTE
CREATE TABLE VENDEDOR (
CODIGO_VENDEDOR INTEGER NOT NULL,
PRE_NOME VARCHAR(20) NOT NULL,
SOBRE_NOME VARCHAR(20) NOT NULL,
PRIMARY KEY(CODIGO_VENDEDOR)
);
INSERT INTO VENDEDOR VALUES
(1, 'JOAO', 'SANTOS'),
(2, 'PEDRO', 'GOMES');
SELECT * FROM VENDEDOR
CREATE TABLE LOJA (
CODIGO_LOJA INTEGER NOT NULL,
RAZAO_SOCIAL VARCHAR(100) NOT NULL,
PRIMARY KEY(CODIGO_LOJA)
);
INSERT INTO LOJA VALUES
(1, 'HELP DO BRASIL INFORMATICA LTDA');
SELECT * FROM LOJA
CREATE TABLE FORNECEDOR (
CNPJ VARCHAR(14) NOT NULL,
NOME_FANTASIA VARCHAR(50) NOT NULL,
TELEFONE VARCHAR(15) NULL,
PRIMARY KEY(CNPJ)
);
INSERT INTO FORNECEDOR VALUES
('87548578347584', 'DELL DO BRASIL', '(11) 4004-6006'),
('34534545455656', 'ACER DO BRASIL', '(11) 5005-7007');
SELECT * FROM FORNECEDOR
CREATE TABLE PRODUTO (
CODIGO_PRODUTO INTEGER NOT NULL,
NOME VARCHAR(200) NOT NULL,
ARMAZENAMENTO VARCHAR(10) NOT NULL,
SISTEMA_OPERACIONAL VARCHAR(10) NOT NULL,
COR VARCHAR(10) NOT NULL,
TELA VARCHAR(4) NOT NULL,
MODELO VARCHAR(15) NOT NULL,
MEMORIA_RAM VARCHAR(5) NOT NULL,
PRECO_UNITARIO FLOAT NOT NULL,
PROCESSADOR VARCHAR(20) NOT NULL,
PRIMARY KEY(CODIGO_PRODUTO)
);
INSERT INTO PRODUTO VALUES
(1, 'DELL D10B15 INTEL i7 BRANCO', '1000 GB','WINDOWS 10', 'BRANCO','15"', 'D10B15','8 GB', '4000','INTEL i7'),
(2, 'DELL D10P15 INTEL i7 PRETO', '1000 GB','WINDOWS 10', 'PRETO','15"', 'D10P15','8 GB', '4000','INTEL i7'),
(3, 'DELL D10C15 INTEL i5 CINZA', '1000 GB','WINDOWS 10', 'CINZA','15"', 'D10C15','8 GB', '3500','INTEL i5'),
(4, 'DELL D50P15 INTEL i5 PRETO', '500 GB','WINDOWS 10', 'PRETO','15"', 'D50P15','4 GB', '3000','INTEL i5'),
(5, 'DELL D50B15 INTEL i3 BRANCO', '500 GB','WINDOWS 10', 'BRANCO','15"', 'D50B15','4 GB', '2500','INTEL i3'),
(6, 'ACER A10B15 INTEL i7 BRANCO', '1000 GB','WINDOWS 10', 'BRANCO','15"', 'A10B15','8 GB', '3500','INTEL i7'),
(7, 'ACER A10P15 INTEL i7 PRETO', '1000 GB','WINDOWS 10', 'PRETO','15"', 'A10P15','8 GB', '3500','INTEL i7'),
(8, 'ACER A10C15 INTEL i5 CINZA', '1000 GB','WINDOWS 10', 'CINZA','15"', 'A10C15','8 GB', '3000','INTEL i5'),
(9, 'ACER A50P15 INTEL i5 PRETO', '500 GB','WINDOWS 10', 'PRETO','15"', 'A50P15','4 GB', '2500','INTEL i5'),
(10, 'ACER A50B15 INTEL i3 BRANCO', '500 GB','WINDOWS 10', 'BRANCO','15"', 'A50B15','4 GB', '2000','INTEL i3');
SELECT * FROM PRODUTO
CREATE TABLE LOJA_PRODUTO (
LOJA_CODIGO_LOJA INTEGER NOT NULL,
PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
ESTOQUE_ATUAL INTEGER NOT NULL,
PRIMARY KEY (LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO),
FOREIGN KEY(LOJA_CODIGO_LOJA)
REFERENCES LOJA(CODIGO_LOJA)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(PRODUTO_CODIGO_PRODUTO)
REFERENCES PRODUTO(CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE VENDA_CLIENTE (
CODIGO_VENDA INTEGER NOT NULL,
LOJA_CODIGO_LOJA_CODIGO_LOJA INTEGER NOT NULL,
LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
CLIENTE_CPF_CNPJ VARCHAR(14) NOT NULL,
VENDEDOR_CODIGO_VENDEDOR INTEGER NOT NULL,
DATA_VENDA DATE NOT NULL,
Q_SAIDA INTEGER NOT NULL,
PRIMARY KEY(CODIGO_VENDA),
FOREIGN KEY(CLIENTE_CPF_CNPJ)
REFERENCES CLIENTE(CPF_CNPJ)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(VENDEDOR_CODIGO_VENDEDOR)
REFERENCES VENDEDOR(CODIGO_VENDEDOR)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (LOJA_CODIGO_LOJA_CODIGO_LOJA, LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO)
REFERENCES LOJA_PRODUTO(LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE COMPRA_FORNECEDOR (
CODIGO_COMPRA INTEGER NOT NULL,
LOJA_CODIGO_LOJA_CODIGO_LOJA INTEGER NOT NULL,
LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
FORNECEDOR_CNPJ VARCHAR(14) NOT NULL,
DATA_COMPRA DATE NOT NULL,
Q_ENTRADA INTEGER NOT NULL,
PRECO_UNITARIO FLOAT NOT NULL,
PRIMARY KEY(CODIGO_COMPRA),
FOREIGN KEY(FORNECEDOR_CNPJ)
REFERENCES FORNECEDOR(CNPJ)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (LOJA_CODIGO_LOJA_CODIGO_LOJA, LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO)
REFERENCES LOJA_PRODUTO(LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TRIGGER ALIMENTA_ESTOQUE ON COMPRA_FORNECEDOR
FOR INSERT AS
BEGIN
DECLARE
@COD_LOJA INT,
@COD_PRODUTO INT,
@QUANTIDADE INT
SELECT @COD_LOJA = LOJA_CODIGO_LOJA_CODIGO_LOJA, @COD_PRODUTO = LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO, @QUANTIDADE = Q_ENTRADA FROM INSERTED
WHERE LOJA_CODIGO_LOJA_CODIGO_LOJA = @COD_LOJA AND LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
IF (@QUANTIDADE >= 1)
BEGIN
UPDATE LOJA_PRODUTO SET ESTOQUE_ATUAL = ESTOQUE_ATUAL+@QUANTIDADE
WHERE LOJA_CODIGO_LOJA = @COD_LOJA AND PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
SELECT 'COMPRA EFETUADA'
END
ELSE
BEGIN
ROLLBACK
RAISERROR ('QUANTIDADE NULA OU NEGATIVA',16,1)
END
END
CREATE TRIGGER BAIXA_ESTOQUE ON VENDA_CLIENTE
FOR INSERT AS
BEGIN
DECLARE
@COD_LOJA INT,
@COD_PRODUTO INT,
@QUANTIDADE INT,
@ESTOQUE INT
SELECT @COD_LOJA = LOJA_CODIGO_LOJA_CODIGO_LOJA, @COD_PRODUTO = LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO, @QUANTIDADE = Q_SAIDA FROM INSERTED
SELECT @ESTOQUE = ESTOQUE_ATUAL FROM LOJA_PRODUTO
IF (@ESTOQUE >= @QUANTIDADE)
BEGIN
UPDATE LOJA_PRODUTO SET ESTOQUE_ATUAL = ESTOQUE_ATUAL-@QUANTIDADE
WHERE LOJA_CODIGO_LOJA = @COD_LOJA AND PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
SELECT 'VENDA EFETUADA'
END
ELSE
BEGIN
ROLLBACK
RAISERROR ('ESTOQUE INSUFICIENTE',16,1)
END
END
Estou com o seguinte problema ao inserir o comando abaixo:
INSERT INTO COMPRA_FORNECEDOR VALUES
(20,1,1,'87548578347584',GETDATE(),5,2000)
vem o erro:
A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK__COMPRA_FORNECEDO__239E4DCF". O conflito ocorreu no banco de dados "LOJADENOTEBOOK", tabela "dbo.LOJA_PRODUTO".
Alguém poderia me ajudar? Segue abaixo a database criada.
CREATE DATABASE LOJADENOTEBOOK
USE LOJADENOTEBOOK
DROP DATABASE LOJADENOTEBOOK
CREATE TABLE CLIENTE (
CPF_CNPJ VARCHAR(14) NOT NULL,
NOME_COMPLETO VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
PRIMARY KEY(CPF_CNPJ)
);
INSERT INTO CLIENTE VALUES
('12345678901234', 'EMPRESA SOCIAL LIMITADA DE SÃO PAULO', 'LIMITADASAOPAULO@HOTMAIL.COM'),
('123.444.543-45', 'ALEXANDRE SANTOS DA RAVIEIRA', 'ALEXANDRE@HOTMAIL.COM'),
('09876543211234', 'EMPRESA SOCIAL LIMITADA DE SANTOS', 'LIMITADASANTOS@HOTMAIL.COM'),
('72374672346723', 'EMPRESA SOCIAL LIMITADA DE BAURU', 'LIMITADABAURU@HOTMAIL.COM'),
('345.654.456-65', 'MIKE SANTORIO ALVES', 'MIKESANTORIO@HOTMAIL.COM');
SELECT * FROM CLIENTE
CREATE TABLE VENDEDOR (
CODIGO_VENDEDOR INTEGER NOT NULL,
PRE_NOME VARCHAR(20) NOT NULL,
SOBRE_NOME VARCHAR(20) NOT NULL,
PRIMARY KEY(CODIGO_VENDEDOR)
);
INSERT INTO VENDEDOR VALUES
(1, 'JOAO', 'SANTOS'),
(2, 'PEDRO', 'GOMES');
SELECT * FROM VENDEDOR
CREATE TABLE LOJA (
CODIGO_LOJA INTEGER NOT NULL,
RAZAO_SOCIAL VARCHAR(100) NOT NULL,
PRIMARY KEY(CODIGO_LOJA)
);
INSERT INTO LOJA VALUES
(1, 'HELP DO BRASIL INFORMATICA LTDA');
SELECT * FROM LOJA
CREATE TABLE FORNECEDOR (
CNPJ VARCHAR(14) NOT NULL,
NOME_FANTASIA VARCHAR(50) NOT NULL,
TELEFONE VARCHAR(15) NULL,
PRIMARY KEY(CNPJ)
);
INSERT INTO FORNECEDOR VALUES
('87548578347584', 'DELL DO BRASIL', '(11) 4004-6006'),
('34534545455656', 'ACER DO BRASIL', '(11) 5005-7007');
SELECT * FROM FORNECEDOR
CREATE TABLE PRODUTO (
CODIGO_PRODUTO INTEGER NOT NULL,
NOME VARCHAR(200) NOT NULL,
ARMAZENAMENTO VARCHAR(10) NOT NULL,
SISTEMA_OPERACIONAL VARCHAR(10) NOT NULL,
COR VARCHAR(10) NOT NULL,
TELA VARCHAR(4) NOT NULL,
MODELO VARCHAR(15) NOT NULL,
MEMORIA_RAM VARCHAR(5) NOT NULL,
PRECO_UNITARIO FLOAT NOT NULL,
PROCESSADOR VARCHAR(20) NOT NULL,
PRIMARY KEY(CODIGO_PRODUTO)
);
INSERT INTO PRODUTO VALUES
(1, 'DELL D10B15 INTEL i7 BRANCO', '1000 GB','WINDOWS 10', 'BRANCO','15"', 'D10B15','8 GB', '4000','INTEL i7'),
(2, 'DELL D10P15 INTEL i7 PRETO', '1000 GB','WINDOWS 10', 'PRETO','15"', 'D10P15','8 GB', '4000','INTEL i7'),
(3, 'DELL D10C15 INTEL i5 CINZA', '1000 GB','WINDOWS 10', 'CINZA','15"', 'D10C15','8 GB', '3500','INTEL i5'),
(4, 'DELL D50P15 INTEL i5 PRETO', '500 GB','WINDOWS 10', 'PRETO','15"', 'D50P15','4 GB', '3000','INTEL i5'),
(5, 'DELL D50B15 INTEL i3 BRANCO', '500 GB','WINDOWS 10', 'BRANCO','15"', 'D50B15','4 GB', '2500','INTEL i3'),
(6, 'ACER A10B15 INTEL i7 BRANCO', '1000 GB','WINDOWS 10', 'BRANCO','15"', 'A10B15','8 GB', '3500','INTEL i7'),
(7, 'ACER A10P15 INTEL i7 PRETO', '1000 GB','WINDOWS 10', 'PRETO','15"', 'A10P15','8 GB', '3500','INTEL i7'),
(8, 'ACER A10C15 INTEL i5 CINZA', '1000 GB','WINDOWS 10', 'CINZA','15"', 'A10C15','8 GB', '3000','INTEL i5'),
(9, 'ACER A50P15 INTEL i5 PRETO', '500 GB','WINDOWS 10', 'PRETO','15"', 'A50P15','4 GB', '2500','INTEL i5'),
(10, 'ACER A50B15 INTEL i3 BRANCO', '500 GB','WINDOWS 10', 'BRANCO','15"', 'A50B15','4 GB', '2000','INTEL i3');
SELECT * FROM PRODUTO
CREATE TABLE LOJA_PRODUTO (
LOJA_CODIGO_LOJA INTEGER NOT NULL,
PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
ESTOQUE_ATUAL INTEGER NOT NULL,
PRIMARY KEY (LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO),
FOREIGN KEY(LOJA_CODIGO_LOJA)
REFERENCES LOJA(CODIGO_LOJA)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(PRODUTO_CODIGO_PRODUTO)
REFERENCES PRODUTO(CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE VENDA_CLIENTE (
CODIGO_VENDA INTEGER NOT NULL,
LOJA_CODIGO_LOJA_CODIGO_LOJA INTEGER NOT NULL,
LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
CLIENTE_CPF_CNPJ VARCHAR(14) NOT NULL,
VENDEDOR_CODIGO_VENDEDOR INTEGER NOT NULL,
DATA_VENDA DATE NOT NULL,
Q_SAIDA INTEGER NOT NULL,
PRIMARY KEY(CODIGO_VENDA),
FOREIGN KEY(CLIENTE_CPF_CNPJ)
REFERENCES CLIENTE(CPF_CNPJ)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(VENDEDOR_CODIGO_VENDEDOR)
REFERENCES VENDEDOR(CODIGO_VENDEDOR)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (LOJA_CODIGO_LOJA_CODIGO_LOJA, LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO)
REFERENCES LOJA_PRODUTO(LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE COMPRA_FORNECEDOR (
CODIGO_COMPRA INTEGER NOT NULL,
LOJA_CODIGO_LOJA_CODIGO_LOJA INTEGER NOT NULL,
LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO INTEGER NOT NULL,
FORNECEDOR_CNPJ VARCHAR(14) NOT NULL,
DATA_COMPRA DATE NOT NULL,
Q_ENTRADA INTEGER NOT NULL,
PRECO_UNITARIO FLOAT NOT NULL,
PRIMARY KEY(CODIGO_COMPRA),
FOREIGN KEY(FORNECEDOR_CNPJ)
REFERENCES FORNECEDOR(CNPJ)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (LOJA_CODIGO_LOJA_CODIGO_LOJA, LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO)
REFERENCES LOJA_PRODUTO(LOJA_CODIGO_LOJA, PRODUTO_CODIGO_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TRIGGER ALIMENTA_ESTOQUE ON COMPRA_FORNECEDOR
FOR INSERT AS
BEGIN
DECLARE
@COD_LOJA INT,
@COD_PRODUTO INT,
@QUANTIDADE INT
SELECT @COD_LOJA = LOJA_CODIGO_LOJA_CODIGO_LOJA, @COD_PRODUTO = LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO, @QUANTIDADE = Q_ENTRADA FROM INSERTED
WHERE LOJA_CODIGO_LOJA_CODIGO_LOJA = @COD_LOJA AND LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
IF (@QUANTIDADE >= 1)
BEGIN
UPDATE LOJA_PRODUTO SET ESTOQUE_ATUAL = ESTOQUE_ATUAL+@QUANTIDADE
WHERE LOJA_CODIGO_LOJA = @COD_LOJA AND PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
SELECT 'COMPRA EFETUADA'
END
ELSE
BEGIN
ROLLBACK
RAISERROR ('QUANTIDADE NULA OU NEGATIVA',16,1)
END
END
CREATE TRIGGER BAIXA_ESTOQUE ON VENDA_CLIENTE
FOR INSERT AS
BEGIN
DECLARE
@COD_LOJA INT,
@COD_PRODUTO INT,
@QUANTIDADE INT,
@ESTOQUE INT
SELECT @COD_LOJA = LOJA_CODIGO_LOJA_CODIGO_LOJA, @COD_PRODUTO = LOJA_CODIGO_PRODUTO_CODIGO_PRODUTO, @QUANTIDADE = Q_SAIDA FROM INSERTED
SELECT @ESTOQUE = ESTOQUE_ATUAL FROM LOJA_PRODUTO
IF (@ESTOQUE >= @QUANTIDADE)
BEGIN
UPDATE LOJA_PRODUTO SET ESTOQUE_ATUAL = ESTOQUE_ATUAL-@QUANTIDADE
WHERE LOJA_CODIGO_LOJA = @COD_LOJA AND PRODUTO_CODIGO_PRODUTO = @COD_PRODUTO
SELECT 'VENDA EFETUADA'
END
ELSE
BEGIN
ROLLBACK
RAISERROR ('ESTOQUE INSUFICIENTE',16,1)
END
END
Alan
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)