Usuário com melhor resposta
Alterar(UPDATE) dados de duas tabelas no sql server

Pergunta
-
1º - Tenho duas tabelas: Tb_Funcionario(CodFunc, NomeFunc,SexoFunc,DataNascFunc) e Tb_TelefFunc(CodTelef, TelefFunc). A ideia é criar um procedimento armazenado que me permita alterar(actualizar) dados das duas tabelas, como faço isso?
Relacionamento
Alter Table Tb_TelefFunc ADD Constraint FK_Tb_TelefFunc_Tb_Funcionario
Foreign Key(CodTelef) References Tb_Funcionario(CodFunc);
Consigo criar um procedimento armazenado para inserir nas duas tabelas em simultâneo, mas não consigo altera-las.CREATE DATABASE Db_SitemaCadstroFuncionarios; USE Db_SitemaCadstroFuncionarios; CREATE TABLE Tb_Funcionario ( CodFuncion INT PRIMARY KEY IDENTITY NOT NULL, NomeFuncion VARCHAR(50)NOT NULL, BI VARCHAR(16)NOT NULL, SexoFuncion CHAR(1)NOT NULL, NascimentoFuncion DATE NOT NULL, EstCivilFuncion VARCHAR(17)NULL ); CREATE TABLE Tb_TelFuncion ( CodTelFuncion INT NOT NULL, TelFuncion VARCHAR(11) NOT NULL, PRIMARY KEY(CodTelFuncion,TelFuncion) ); ALTER TABLE Tb_TelFuncion ADD CONSTRAINT FK_Tb_TelFuncion_Tb_Funcionario FOREIGN KEY(CodTelFuncion) REFERENCES Tb_Funcionario(CodFuncion); -- Proceedimento -- Procedimento para alterar funcionario CREATE PROC uSp_UpDateFuncionario ( @CodFuncion AS INT, @NomeFuncion AS VARCHAR(50), @BI AS VARCHAR(16), @SexoFuncion AS CHAR(1), @NascimentoFuncion AS DATE, @EstCivilFuncion VARCHAR(17), @TelFuncionPrincipal AS VARCHAR(11), @TelFuncionAlteranativo AS VARCHAR(11) = NULL ) AS BEGIN BEGIN TRY BEGIN TRAN -- alterar na tabela funcionario UPDATE Tb_Funcionario SET NomeFuncion = @NomeFuncion, BI = @BI, SexoFuncion = @SexoFuncion, NascimentoFuncion = @NascimentoFuncion, EstCivilFuncion = @EstCivilFuncion WHERE CodFuncion = @CodFuncion DECLARE @CodGerado AS INT = @CodFuncion; -- alterar na tabela telefone IF(@TelFuncionPrincipal IS NOT NULL) BEGIN UPDATE Tb_TelFuncion SET TelFuncion = @TelFuncionPrincipal WHERE CodTelFuncion = @CodGerado END IF(@TelFuncionAlteranativo IS NOT NULL) BEGIN UPDATE Tb_TelFuncion SET TelFuncion = @TelFuncionAlteranativo WHERE CodTelFuncion = @CodGerado; END SELECT @CodFuncion AS Retorno; COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN SELECT ERROR_MESSAGE() END CATCH END
2º - Ao fazer um select(criei um procedimento de consulta), ele trás os dados repetidos por causa do telefone principal e alternativo, não há problema nisto? Caso não seja correto retornar este valor, como faço para retornar os valores correto? És o código:
-- procedimento para consultar CREATE PROC uSp_ConsultarFuncionario ( @CodFuncion AS INT = NULL, @NomeFuncion AS VARCHAR(50) = NULL, @BI AS VARCHAR(16) = NULL, @TelFuncion AS INT = NULL ) AS BEGIN BEGIN TRY BEGIN TRAN SELECT func.CodFuncion, func.NomeFuncion, func.BI, func.SexoFuncion, func.NascimentoFuncion, func.EstCivilFuncion, tel.TelFuncion FROM Tb_Funcionario AS func JOIN Tb_TelFuncion AS tel ON func.CodFuncion = tel.CodTelFuncion WHERE(@CodFuncion IS NULL OR func.CodFuncion = @CodFuncion)AND (@NomeFuncion IS NULL OR func.NomeFuncion LIKE '%' + @NomeFuncion + '%')AND (@BI IS NULL OR func.BI LIKE '%' + @BI + '%')AND (@TelFuncion IS NULL OR tel.TelFuncion = @TelFuncion); COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN SELECT ERROR_MESSAGE() END CATCH END
És o resultado
1 Anacleto Bunga 002025701LA036 M 1987-06-15 Solteiro(a) 923776043 1 Anacleto Bunga 002025701LA036 M 1987-06-15 Solteiro(a) 993231938 3 Filipa Pedro 002025701LA036 F 1989-03-12 Divorciado(a) 912764539 4 Anacleto Bunga2 002023701BA036 M 1987-06-15 Solteiro(a) 928548351 8 Carla Mendes 002023701LS012 M 1987-06-15 Solteiro(a) 927109831 10 Paula 002023701LN000 F 1987-06-15 Viuva(a) 3216199999 10 Paula 002023701LN000 F 1987-06-15 Viuva(a) 997109800 11 Paula Fernando 002023701KN000 F 1987-06-15 Casada(a) 1216199999
Respostas
-
Boa tarde,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
Atenciosamente
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Marcado como Resposta Marcos SJ terça-feira, 20 de outubro de 2015 19:22
Todas as Respostas
-
1º - Tenho duas tabelas: Tb_Funcionario(CodFunc, NomeFunc,SexoFunc,DataNascFunc) e Tb_TelefFunc(CodTelef, TelefFunc). A ideia é criar um procedimento armazenado que me permita alterar(actualizar) dados das duas tabelas, como faço isso?
Relacionamento
Alter Table Tb_TelefFunc ADD Constraint FK_Tb_TelefFunc_Tb_Funcionario
Foreign Key(CodTelef) References Tb_Funcionario(CodFunc);
Consigo criar um procedimento armazenado para inserir nas duas tabelas em simultâneo, mas não consigo altera-las.CREATE DATABASE Db_SitemaCadstroFuncionarios; USE Db_SitemaCadstroFuncionarios; CREATE TABLE Tb_Funcionario ( CodFuncion INT PRIMARY KEY IDENTITY NOT NULL, NomeFuncion VARCHAR(50)NOT NULL, BI VARCHAR(16)NOT NULL, SexoFuncion CHAR(1)NOT NULL, NascimentoFuncion DATE NOT NULL, EstCivilFuncion VARCHAR(17)NULL ); CREATE TABLE Tb_TelFuncion ( CodTelFuncion INT NOT NULL, TelFuncion VARCHAR(11) NOT NULL, PRIMARY KEY(CodTelFuncion,TelFuncion) ); ALTER TABLE Tb_TelFuncion ADD CONSTRAINT FK_Tb_TelFuncion_Tb_Funcionario FOREIGN KEY(CodTelFuncion) REFERENCES Tb_Funcionario(CodFuncion); -- Proceedimento -- Procedimento para alterar funcionario CREATE PROC uSp_UpDateFuncionario ( @CodFuncion AS INT, @NomeFuncion AS VARCHAR(50), @BI AS VARCHAR(16), @SexoFuncion AS CHAR(1), @NascimentoFuncion AS DATE, @EstCivilFuncion VARCHAR(17), @TelFuncionPrincipal AS VARCHAR(11), @TelFuncionAlteranativo AS VARCHAR(11) = NULL ) AS BEGIN BEGIN TRY BEGIN TRAN -- alterar na tabela funcionario UPDATE Tb_Funcionario SET NomeFuncion = @NomeFuncion, BI = @BI, SexoFuncion = @SexoFuncion, NascimentoFuncion = @NascimentoFuncion, EstCivilFuncion = @EstCivilFuncion WHERE CodFuncion = @CodFuncion DECLARE @CodGerado AS INT = @CodFuncion; -- alterar na tabela telefone IF(@TelFuncionPrincipal IS NOT NULL) BEGIN UPDATE Tb_TelFuncion SET TelFuncion = @TelFuncionPrincipal WHERE CodTelFuncion = @CodGerado END IF(@TelFuncionAlteranativo IS NOT NULL) BEGIN UPDATE Tb_TelFuncion SET TelFuncion = @TelFuncionAlteranativo WHERE CodTelFuncion = @CodGerado; END SELECT @CodFuncion AS Retorno; COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN SELECT ERROR_MESSAGE() END CATCH END
2º - Ao fazer um select(criei um procedimento de consulta), ele trás os dados repetidos por causa do telefone principal e alternativo, não há problema nisto? Caso não seja correto retornar este valor, como faço para retornar os valores correto? És o código:
-- procedimento para consultar CREATE PROC uSp_ConsultarFuncionario ( @CodFuncion AS INT = NULL, @NomeFuncion AS VARCHAR(50) = NULL, @BI AS VARCHAR(16) = NULL, @TelFuncion AS INT = NULL ) AS BEGIN BEGIN TRY BEGIN TRAN SELECT func.CodFuncion, func.NomeFuncion, func.BI, func.SexoFuncion, func.NascimentoFuncion, func.EstCivilFuncion, tel.TelFuncion FROM Tb_Funcionario AS func JOIN Tb_TelFuncion AS tel ON func.CodFuncion = tel.CodTelFuncion WHERE(@CodFuncion IS NULL OR func.CodFuncion = @CodFuncion)AND (@NomeFuncion IS NULL OR func.NomeFuncion LIKE '%' + @NomeFuncion + '%')AND (@BI IS NULL OR func.BI LIKE '%' + @BI + '%')AND (@TelFuncion IS NULL OR tel.TelFuncion = @TelFuncion); COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN SELECT ERROR_MESSAGE() END CATCH END
És o resultado
1 Anacleto Bunga 002025701LA036 M 1987-06-15 Solteiro(a) 923776043
1 Anacleto Bunga 002025701LA036 M 1987-06-15 Solteiro(a) 993231938
3 Filipa Pedro 002025701LA036 F 1989-03-12 Divorciado(a) 912764539
4 Anacleto Bunga2 002023701BA036 M 1987-06-15 Solteiro(a) 928548351
8 Carla Mendes 002023701LS012 M 1987-06-15 Solteiro(a) 927109831
10 Paula 002023701LN000 F 1987-06-15 Viuva(a) 3216199999
10 Paula 002023701LN000 F 1987-06-15 Viuva(a) 997109800
11 Paula Fernando 002023701KN000 F 1987-06-15 Casada(a) 1216199999
- Mesclado Marcos SJ quarta-feira, 14 de outubro de 2015 12:58 Thread duplicada
-
-
Boa tarde,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
Atenciosamente
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
@Anacleto Bunga
Qual e o problema?
A flower cannot blossom without sunshine, and man cannot live without love.
@Anacleto Bunga
Qual é o problema?
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Boa tarde,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
Atenciosamente
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Marcado como Resposta Marcos SJ terça-feira, 20 de outubro de 2015 19:22