Array
(
)

Duvida com procedures

Diego Dias
   - 13 nov 2012

Tenho 2 tabelas no meu BD, neste preciso adicionar uma pessoa com Procedures e Triggers.
É necessário seguir uma ordem para adicionar, segue:
1º - Adiciona Endereco
2º - Adicionar Pessoa
A tabela Pessoa possui Foreign Key de Endereco (codEndereco [int, IDENTITY]), como faço para retornar o codEndereço para Pessoa?

Robson Robsonalves.net
   - 13 nov 2012

Você realmente quer usar Trigger?

Eu faria:
DECLARE @codEndereco INT

Insert into Endereo (....) VALUES (...)

SET @codEndereco = (SELECT @@IDENTITY)

INSERT INTO Pessoa (...) VALUES (..., @codEndereco)

Trigger é feio =/

Joel Rodrigues
   - 13 nov 2012

Olá, se entendi bem, em um único procedure você quer fazer um insert na tabela de endereços e de pessoas, certo?
Primeiramente você insere o dado na tabela de endereços e faz um select MAX(codEndereco) ou SCOPE_IDENTITY() para obter o código inserido. Em seguida, usa essa informação para inserir na tabela de pessoas.
Como se trata de um identity, experimente usar a função SCOPE_IDENTIY(), por ser mais segura e adequada.
Boa sorte.

Joel Rodrigues
   - 13 nov 2012

Opa, minha mensagem saiu atrasada. he he
Mas enfim, o que o amigo acima disse está correto, você não precisa de triggers pelo que parece.

Diego Dias
   - 13 nov 2012

Sim, preciso usar Trigger para o processo.
É que sou iniciante no assunto, estou pesquisando mas não encontro uma operação concreta.

Obrigado.

Citação:
Você realmente quer usar Trigger?

Eu faria:
DECLARE @codEndereco INT

Insert into Endereo (....) VALUES (...)

SET @codEndereco = (SELECT @@IDENTITY)

INSERT INTO Pessoa (...) VALUES (..., @codEndereco)

Trigger é feio =/

Joel Rodrigues
   - 13 nov 2012

Diego, por que motivo você precisa do trigger? Onde ele se encaixa?

Diego Dias
   - 13 nov 2012

Joel, na verdade não sei realmente se precisa de Trigger, meu tutor me informou que era preciso, para que, quando for inserir a pessoa soltar um gatilho para inserir o endereço antes.
Seria basicamente isso.

Citação:
Diego, por que motivo você precisa do trigger? Onde ele se encaixa?

Robson Robsonalves.net
   - 13 nov 2012

O conceito da trigger é esse mesmo...
Porém o seu cenário se resolve de forma muito mais simples.

Mas vc precisa criar uma trigger:

#Código

CREATE
TRIGGER T_INSERTED ON TABLE
FOR
INSERT
AS

select * from inserted


A trigger executa o gatilho a partir dos tipos que vc declarou na criação da trigger.
O Inserted é o registro que está sendo inserido, então você monta seu select para fazer o insert na tabela de pessoa.

Diego Dias
   - 14 nov 2012

Joel, na verdade são procedures diferentes, uma pra endereço e outra para pessoa.
Agradeço a atenção.

Citação:
Olá, se entendi bem, em um único procedure você quer fazer um insert na tabela de endereços e de pessoas, certo?
Primeiramente você insere o dado na tabela de endereços e faz um select MAX(codEndereco) ou SCOPE_IDENTITY() para obter o código inserido. Em seguida, usa essa informação para inserir na tabela de pessoas.
Como se trata de um identity, experimente usar a função SCOPE_IDENTIY(), por ser mais segura e adequada.
Boa sorte.