Trigger em Procedure
Boas.
Eu tenho uma Tabela Paciente com os atributos: Nome, Morada, IdFamilia
IdFamilia é chave estrangeira para a tabela Familia.
A tabela Familia tem os atributos: IdFamilia, Morada, NPessoas.
Criei uma procedure para inserir Paciente.
spInsertPaciente 'Nome', 'Morada', 'IdFamilia'
Nessa procedure é verificado se existe algum registo de alguma Familia com a Morada do Paciente.
Se sim -> Paciente.IdFamilia = esse Id encontrado
Se não -> é criado um novo registo na Tabela Familia com os dados introduzidos
O problema está quando vou inserir novo Paciente e ele não sabe se alguem da Familia já está registado.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Pensei em criar um trigger na procedure, mas acho que volto ao mesmo problema
Agradeço ajuda
Eu tenho uma Tabela Paciente com os atributos: Nome, Morada, IdFamilia
IdFamilia é chave estrangeira para a tabela Familia.
A tabela Familia tem os atributos: IdFamilia, Morada, NPessoas.
Criei uma procedure para inserir Paciente.
spInsertPaciente 'Nome', 'Morada', 'IdFamilia'
Nessa procedure é verificado se existe algum registo de alguma Familia com a Morada do Paciente.
Se sim -> Paciente.IdFamilia = esse Id encontrado
Se não -> é criado um novo registo na Tabela Familia com os dados introduzidos
O problema está quando vou inserir novo Paciente e ele não sabe se alguem da Familia já está registado.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Pensei em criar um trigger na procedure, mas acho que volto ao mesmo problema
Agradeço ajuda
Guilherme
Curtidas 0
Respostas
Guilherme
16/07/2014
É este o código que fiz.
CREATE PROCEDURE spInsertPaciente @Nome VARCHAR(20), @Morada VARCHAR(50), @IdFamilia INT, @NPessoas INT AS BEGIN BEGIN TRY BEGIN TRAN DECLARE @Fam INT SELECT IdFamilia INTO Fam FROM Familia WHERE Morada LIKE '%' + @Morada + '%' SET @Fam = (SELECT COUNT(*) FROM Fam) IF(@Fam = 0) BEGIN INSERT INTO Familia(IdFamilia, Morada, NPessoas) VALUES(@IdFamilia, @Morada, @NPessoas) SET Fam = (SELECT IdFamilia FROM Fam WHERE IdFamilia = @IdFamilia) INSERT INTO Paciente(Nome, Morada, IdFamilia) VALUES(@Nome, @Morada, @IdFamilia) END ELSE SET Fam = (SELECT IdFamilia FROM Fam WHERE IdFamilia = @IdFamilia) INSERT INTO Paciente(Nome, Morada, IdFamilia) VALUES(@Nome, @Morada, @IdFamilia) COMMIT TRAN END TRY BEGIN CATCH SELECT ERROR_MESSAGE() AS Retorno END CATCH END
GOSTEI 0
Marisiana Battistella
16/07/2014
O problema está quando vou inserir novo Paciente e ele não sabe se alguem da Familia já está registado.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Mas vc não faz o teste para verificar se existe membro da familia cadastrado?
Não uso SQLServer, então não conseguir entender claramente o código...
GOSTEI 0
Guilherme
16/07/2014
Faz esse teste quando vejo se já alguma familia registada com aquela morada.
Cada familia tem a sua morada, não podendo pessoas de familias diferentes viver na mesma morada
Cada familia tem a sua morada, não podendo pessoas de familias diferentes viver na mesma morada
GOSTEI 0
Isaac Jose
16/07/2014
O problema está quando vou inserir novo Paciente e ele não sabe se alguem da Familia já está registado.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Mas vc não faz o teste para verificar se existe membro da familia cadastrado?
Não uso SQLServer, então não conseguir entender claramente o código...
eu nao entendi direito mais e se em uma morada tiver mais de uma familia? dentro de um terreno podemos ter n casas ex bairro a av 1 numero 5 . sendo que nesse numero 5 possui casa 1 casa2 casa3 porem so o pessoal da casa sabe disso para todos os orgaos permanece como um unica casa. ai vc cadastra esse registro de uma pessoa da casa1 e depois precisa cadastrar uma pessoa de outra familia da casa2 como ira fazer isso?
nao estou falando que o seu esta errado ate pq nao sei o que o sistema ira fazer mais sim pelo que vc espos ...
att Isaac
GOSTEI 0
Isaac Jose
16/07/2014
O problema está quando vou inserir novo Paciente e ele não sabe se alguem da Familia já está registado.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Neste caso passo o parametro NULL para o campo IdFamilia, mas esta procedure não está a preencher este mesmo campo com o valor certo.
Mas vc não faz o teste para verificar se existe membro da familia cadastrado?
Não uso SQLServer, então não conseguir entender claramente o código...
eu nao entendi direito mais e se em uma morada tiver mais de uma familia? dentro de um terreno podemos ter n casas ex bairro a av 1 numero 5 . sendo que nesse numero 5 possui casa 1 casa2 casa3 porem so o pessoal da casa sabe disso para todos os orgaos permanece como um unica casa. ai vc cadastra esse registro de uma pessoa da casa1 e depois precisa cadastrar uma pessoa de outra familia da casa2 como ira fazer isso?
nao estou falando que o seu esta errado ate pq nao sei o que o sistema ira fazer mais sim pelo que vc espos ...
att Isaac
GOSTEI 0
Maria Araújo
16/07/2014
Da maneira como o Guilherme pensa só se for várias casas numa rua, em que só diferem do nº da porta.
Aí sim, só há uma familia por cada morada(rua + nº) Certo?
Aí sim, só há uma familia por cada morada(rua + nº) Certo?
GOSTEI 0
Isaac Jose
16/07/2014
Da maneira como o Guilherme pensa só se for várias casas numa rua, em que só diferem do nº da porta.
Aí sim, só há uma familia por cada morada(rua + nº) Certo?
Aí sim, só há uma familia por cada morada(rua + nº) Certo?
Sim e a realidade no Brasil é outra... temos muitas casas com um unico numero mais internamente podem haver varias..
mais é como eu falei nao sei se é o caso dele rs
GOSTEI 0
Guilherme
16/07/2014
A minha ideia é mesmo o que a Maria disse: uma ru com várias casas, mas cada familia tem um n* de porta diferente, o que faz com cada morada de cada familia seja unica
GOSTEI 0
Isaac Jose
16/07/2014
A minha ideia é mesmo o que a Maria disse: uma ru com várias casas, mas cada familia tem um n* de porta diferente, o que faz com cada morada de cada familia seja unica
e se em uma casa tiver mais de 1 familia?
GOSTEI 0
Guilherme
16/07/2014
Não tem, se for uma casa só pode ter uma familia.
Se for um predio, cada familia tem um nº de porta, dai ao fazer a comparação se diferir apenas no nº já não é a mesma morada e portanto crio nova familia
Se for um predio, cada familia tem um nº de porta, dai ao fazer a comparação se diferir apenas no nº já não é a mesma morada e portanto crio nova familia
GOSTEI 0
Isaac Jose
16/07/2014
A minha ideia é mesmo o que a Maria disse: uma ru com várias casas, mas cada familia tem um n* de porta diferente, o que faz com cada morada de cada familia seja unica
então no seu caso em um numero é impossivel ter mais de uma familia morando.. se for isso ao meu ver esta correto..
GOSTEI 0
Guilherme
16/07/2014
Mas a minha procedure não faz o que pretendo.
Eu pretendo passar NULL no IdFamilia para um Paciente. Depois, a procedure é que irá ver se há alguém com a mesma Morada.
Se sim, substitui NULL pelo IdFamilia obtido, se não substitui NULL por um novo IdFamilia criado.
Eu pretendo passar NULL no IdFamilia para um Paciente. Depois, a procedure é que irá ver se há alguém com a mesma Morada.
Se sim, substitui NULL pelo IdFamilia obtido, se não substitui NULL por um novo IdFamilia criado.
GOSTEI 0