none
Adicionar campos e FOREIGN KEY RRS feed

  • Pergunta

  • Galera preciso fazer um DDL que cria 2 campos em uma tabela já existente via linha de comando e colocar um deles como FOREIGN KEY, como posso fazer isso ?

    Obrigado


    SirSmart

    quarta-feira, 27 de fevereiro de 2019 13:05

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]

    quarta-feira, 27 de fevereiro de 2019 13:17
  • 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

    quarta-feira, 27 de fevereiro de 2019 13:29
  • Deleted
    • Marcado como Resposta SirSmart quarta-feira, 27 de fevereiro de 2019 14:10
    quarta-feira, 27 de fevereiro de 2019 14:01
  • 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]

    quarta-feira, 27 de fevereiro de 2019 17:10