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
            [Login] => pe@duosoft.com.br
            [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