Alterar(UPDATE) dados de duas tabelas no sql server

10/09/2015

0

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.
Anacleto Linux

Anacleto Linux

Responder

Post mais votado

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

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 ?!?

Marcos P

Marcos P
Responder

Mais Posts

04/10/2015

Anacleto Linux

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
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar