Alterar(UPDATE) dados de duas tabelas no sql server
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.
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.
Anacleto Linux
Curtidas 0
Melhor post
Marcos P
10/10/2015
Anacleto,
Você consegue montar um select simples com o relacionamento entre as tabelas de modo a identificar apenas um par de registros ?
Se você conseguir isso, consegue ajustar a query trocando select para update. Ficaria algo, mais ou menos assim...
Observe que o "from" é exatamente o mesmo que você faz no select !
Uma vez resolvido o update, colocá-lo em uma stored procedure é trivial, basta tratar certinho os parâmetros que você precisa receber para sua lógica funcionar.
Ok ?!?
Você consegue montar um select simples com o relacionamento entre as tabelas de modo a identificar apenas um par de registros ?
Se você conseguir isso, consegue ajustar a query trocando select para update. Ficaria algo, mais ou menos assim...
update tabelaA set colunaX = tabelaB.ColunaY from tabelaA inner join tabelaB on (tabelaA.chave = tabelaB.chave).
Observe que o "from" é exatamente o mesmo que você faz no select !
Uma vez resolvido o update, colocá-lo em uma stored procedure é trivial, basta tratar certinho os parâmetros que você precisa receber para sua lógica funcionar.
Ok ?!?
GOSTEI 1
Mais Respostas
Anacleto Linux
10/09/2015
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.
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
GOSTEI 0