FOREIGN KEY
queria colocar Foreign Key
tentei assim no meio
prod_tipo INTEGER FOREIGN KEY REFERENCES CADTIPPROD(CADTIPPROD.TIPO_COD) ,
prod_forn INTEGER FOREIGN KEY REFERENCES CADFORN(CADFORN.FORN_COD),
prod_unid INTEGER FOREIGN KEY REFERENCES CADUNIDPROD(CADUNIDPROD.UNID_COD) ,
tentei assim no final
ALTER TABLE CADPROD
ADD FOREIGN KEY (prod_tipo) REFERENCES CADTIPPROD(TIPO_COD);
ALTER TABLE CADPROD
ADD FOREIGN KEY (prod_forn) REFERENCES CADFORN(FORN_COD);
ALTER TABLE CADPROD
ADD FOREIGN KEY (prod_unid) REFERENCES CADUNIDPROD(UNID_COD);
E nada do Script SQL rodar ....
Na criação sem os Foreign Key executo normal .
Emulador SQLDBX
CREATE TABLE TABELA1
(
prod_tipo INT,
prod_forn INT,
prod_unid INT,
CONSTRAINT FK_TIPO_PROD FOREIGN KEY(PROD_TIPO)
REFERENCES CADTIPPROD(TIPO_COD),
CONSTRAINT FK_FORN_COD FOREIGN KEY(PROD_FORN)
REFERENCES CADFORN(FORN_COD),
CONSTRAINT FK_COD_UNIDADADE FOREIGN KEY(PROD_UNID)
REFERENCES CADUNIPROD(UNID_COD)
)
mais testei um exemplo e funcionou, o que aparenta é que precisa de CONSTRAINT dos 2 lados da tabela
http://www.sqlinfo.net/sqlserver/sql_server_Create_table.php
http://www.sqlinfo.net/sqlserver/sql_server_Create_foreign_key_contraints.php
Creating the person table
Citação:CREATE TABLE person
(
num INT NOT NULL ,
firstname VARCHAR(20) NULL ,
lastname VARCHAR(30) NULL ,
gender_code VARCHAR(1) NULL ,
birth_dttm DATETIME NULL ,
inactive_date DATETIME NULL ,
CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (num ASC)
ON [PRIMARY]
)
GO
Creating the phone table
Citação:CREATE TABLE phone
(
person_num INT NOT NULL ,
type_code CHAR(3) NOT NULL ,
area_code CHAR(3) NULL ,
exchange CHAR(3) NULL ,
extension CHAR(4) NULL ,
CONSTRAINT PK_phone PRIMARY KEY CLUSTERED
(person_num ASC, type_code ASC) ON [PRIMARY]
)
GO
Creating the person - phone foreign key constraint
Citação:
ALTER TABLE phone ADD
CONSTRAINT FK_phone_person_num
FOREIGN KEY (person_num)
REFERENCES person(num)
GO
Obg a Postagem Abss
uso a ferramenta sqldbx . um Adm de SQLSERVER .
No site sei que o server é SQL2005
Não to usando nenhum recurso grafico alem de Editor .
ainda estou em fase de aprendizado , conversão pra ser mais exato
A sintaxe seria:
ALTER TABLE SuaTabela
ADD CONSTRAINT NomeDaConstraint FOREIGN KEY (NomeDoCampoLocal) REFERENCES TabelaExterna(NomeDoCampoExterno) ON DELETE [NO ACTION / CASCADE / SET DEFAULT] ON UPDATE [NO ACTION / CASCADE / SET DEFAULT ];
Onde:
NO ACTION: O registro-pai não vai apagar o registro-filhote e nem alterar o valor do campo.
CASCADE: Caso o registro-pai seja excluÃdo, o filhote também o é.
SET DEFAULT: A não-correspondência de um registro-pai altera o valor do registro-filhote, devolvedo-lhe o valor padrão definido para o campo.
Durante a criação da tabela (instrução CREATE TABLE), você pode utilizar a mesma sintaxe, [Ô]pulando[Ô] um script. Por exemplo, criando a tabela TELEFONES e a TIPOS (de telefones), poderia ser assim:
USE [BancoDeDados]
GO
CREATE TABLE [TIPOS] ([CODTIPO] INT IDENTITY(1,1) NOT NULL PRIMARY KEY, [TIPO] VARCHAR(70) NOT NULL DEFAULT N[ô]Não-informado[ô]);
GO
CREATE UNIQUE INDEX ixTipoDeTelefone ON [TIPOS] ([TIPO]);
GO
CREATE TABLE [TELEFONES] ([CODTELEFONE] INT IDENTITY(1,1) NOT NULL PRIMARY KEY, [CODTIPO] INT NOT NULL DEFAULT 0, [DDI] VARCHAR(2) NOT NULL DEFAULT [ô]00[ô], [DDD] VARCHAR(2) NOT NULL DEFAULT [ô]00[ô], [FONE] VARCHAR(8) NOT NULL DEFAULT [ô]00000000[ô], CONSTRAINT [fkTipoDeTelefone] FOREIGN KEY ([CodTipo]) REFERENCES [TIPOS] ([CodTipo]) ON DELETE NO ACTION ON UPDATE NO ACTION);
GO
CREATE UNIQUE INDEX ixTelefone ON [TELEFONES] ([DDI],[DDD],[FONE]);
GO
só que me retorna assim
Quando vo excluir um TIPO que nao está associada a tabela TELEFONES exclui sem erros
Quando vo excluir um TIPO que está associado a tabela TELEFONES me retorna os erros
The DELETE statement conflicted with the REFERENCE constraint [Ô]fkTipoDeTelefone[Ô]. The conflict occurred in database [Ô]BASEDADOS[Ô], table [Ô]USER.TELEFONES[Ô], column [ô]CODTIPO[ô]. Severity 16
The statement has been terminated.
A instrucao associada nao esta preparada State 0
Quando testo pelo Programa, fica certo ..... se tem relacao nao exclui , se nao tem relacao ai exclui ....
esta correto isso ? pq aparece as mensagens acima
Citação:CREATE PROCEDURE TELEFONES_INSERIR
@CODTIPO INTEGER,
@DDI VARCHAR(2),
@DDD VARCHAR(2),
@FONE VARCHAR(8)
As
SET NOCOUNT ON
BEGIN TRANSACTION
insert into TELEFONES ( CODTIPO , DDI , DDD ,FONE)
values (@CODTIPO , @DDI , @DDD , @FONE)
COMMIT TRANSACTION
GO
Citação:
CREATE PROCEDURE TIPOS_INSERIR
@TIPO VARCHAR(70)
As
SET NOCOUNT ON
BEGIN TRANSACTION
insert into TIPOS ( TIPO)
values ( @TIPO)
COMMIT TRANSACTION
GO
Citação:
CREATE PROCEDURE TIPOS_EXCLUIR
@CODTIPO INTEGER
AS
SET NOCOUNT ON
BEGIN TRANSACTION
DELETE FROM TIPOS WHERE CODTIPO = @CODTIPO
COMMIT TRANSACTION
GO