Usuário com melhor resposta
Adicionar campos e FOREIGN KEY

Pergunta
-
Respostas
Todas as Respostas
-
SirSmart,
Veja este exemplo:
-- Criando as tabelas -- Create Table Fornecedores (CodigoFornecedor Int Primary Key, NomeFornecedor Varchar(100)) Go Create Table Produtos (CodigoProduto Int Primary Key, NomeProduto Varchar(100)) Go -- Adicionando duas colunas na tabela Produtos -- Alter Table Produtos Add CodigoFornecedor Int Not Null, Quantidade Int Not Null Go -- Adicionando Foreign Key em Produtos -- Alter Table Produtos Add Constraint [FK_CodigoFornecedores_Produtos] Foreign Key (CodigoFornecedor) References Fornecedores(CodigoFornecedor) Go
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Cara fiz isso aqui :
GO ALTER TABLE dbo.OrigemPedido ADD CONSTRAINT [FK_ServicoId_OrigemPedido] FOREIGN KEY (ServicoId) REFERENCES dbo.Servico (IdServico) GO
Mas estou tomando esse erro:
Msg 1776, Level 16, State 0, Line 15 There are no primary or candidate keys in the referenced table 'dbo.Servico' that match the referencing column list in the foreign key 'FK_ServicoId_OrigemPedido'. Msg 1750, Level 16, State 1, Line 15 Could not create constraint or index. See previous errors.
Não entendi o problema...
Segue minhas tabelas:
CREATE TABLE [dbo].[Servico]( [IdServico] [int] IDENTITY(1,1) NOT NULL, [Descricao] [varchar](1) NOT NULL, [Status] [bit] NOT NULL ) ON [PRIMARY]
CREATE TABLE [dbo].[OrigemPedido]( [OrigemPedidoId] [int] NOT NULL, [DescricaoOrigem] [nvarchar](200) NULL, [DataAtualizacao] [datetime2](7) NULL, [CodigoERPNFIndividual] [bigint] NULL, [CodigoERPNFRegimeEspecial] [bigint] NULL, [ServicoId] [int] NULL, PRIMARY KEY CLUSTERED ( [OrigemPedidoId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Obrigado
SirSmart
-
-
Cara fiz isso aqui :
GO ALTER TABLE dbo.OrigemPedido ADD CONSTRAINT [FK_ServicoId_OrigemPedido] FOREIGN KEY (ServicoId) REFERENCES dbo.Servico (IdServico) GO
Mas estou tomando esse erro:
Msg 1776, Level 16, State 0, Line 15 There are no primary or candidate keys in the referenced table 'dbo.Servico' that match the referencing column list in the foreign key 'FK_ServicoId_OrigemPedido'. Msg 1750, Level 16, State 1, Line 15 Could not create constraint or index. See previous errors.
Não entendi o problema...
Segue minhas tabelas:
CREATE TABLE [dbo].[Servico]( [IdServico] [int] IDENTITY(1,1) NOT NULL, [Descricao] [varchar](1) NOT NULL, [Status] [bit] NOT NULL ) ON [PRIMARY]
CREATE TABLE [dbo].[OrigemPedido]( [OrigemPedidoId] [int] NOT NULL, [DescricaoOrigem] [nvarchar](200) NULL, [DataAtualizacao] [datetime2](7) NULL, [CodigoERPNFIndividual] [bigint] NULL, [CodigoERPNFRegimeEspecial] [bigint] NULL, [ServicoId] [int] NULL, PRIMARY KEY CLUSTERED ( [OrigemPedidoId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Obrigado
SirSmart
SirSmart,
Você observou que não existe uma chave primária declarada na tabela Serviços! Para realizar um relacionamento físico entre duas tabelas é obrigatório que as tabelas envolvidas possuem chaves primárias declaradas.
Ao contrário de quando estabelecemos um relacionamento lógico, ou seja, não estamos fazendo uso de verdade das chaves estrangeiras, o campo que da sentido da referência ou relação é declarado, mas não aplicamos uma chave a ele.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]