FOREIGN KEY

GUTOTEC 19/10/2011 14:00:09
#387074
Pessoal tentei assim no Create Table
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 .
SAMUKA 19/10/2011 14:41:28
#387079
GUTOTEC, aparentemente a sintaxe está correta. Qual é o Banco?
GUTOTEC 19/10/2011 14:56:45
#387081
banco SQLSERVER 2005
Emulador SQLDBX
PHOENIX209E 19/10/2011 15:14:49
#387084
Tente assim:

 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)
)

GUTOTEC 19/10/2011 16:17:24
#387095
Olá Testei aqui mais nao foi

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
PHOENIX209E 19/10/2011 16:26:17
#387102
Que estranho,voce nao esta usando o SQL Management Studio né?!
GUTOTEC 19/10/2011 16:33:25
#387104
Quest irmão irmão ....estou usando Remoto .... o server é no site
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
PROFESSOR 21/10/2011 19:37:35
#387366
Observe que os tipos dos dados em ambas as tabelas sejam o mesmo, e que na tabela-pai, esse campo seja sempre unívoco, ou seja, nunca se repita. UniqueIdentifier (GUID) e Identity (Inteiro longo ou de 32 bits) são as opções mais coerentes.

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

GUTOTEC 02/11/2011 14:51:02
#388325
Prof. , fiz os Testes aqui
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




Tópico encerrado , respostas não são mais permitidas