Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 534156
            [titulo] => Alterar(UPDATE) dados de duas tabelas no sql server
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-10-10 18:21:24
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 378439
            [status] => A
            [isExample] => 
            [NomeUsuario] => Marcos P
            [Apelido] => 
            [Foto] => 378439_20140801115452.png
            [Conteudo] => 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...

[code]
update tabelaA set colunaX = tabelaB.ColunaY
from tabelaA inner join tabelaB on (tabelaA.chave = tabelaB.chave).
[/code]

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

Alterar(UPDATE) dados de duas tabelas no sql server

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

Post mais votado

Marcos P
   - 10 out 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...

#Código

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

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

#Código


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