Eu quero atualizar duas tabelas de uma só vez. Como faço isso no SQL Server 2005?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
sql
sql-server
sql-server-2005
tsql
Jango
fonte
fonte
Respostas:
Você não pode atualizar várias tabelas em uma instrução, no entanto, pode usar uma transação para garantir que duas
UPDATE
instruções sejam tratadas atomicamente. Você também pode agrupá-los para evitar uma viagem de ida e volta.fonte
Você não pode atualizar duas tabelas ao mesmo tempo, mas pode vincular uma atualização a uma inserção usando
OUTPUT INTO
e pode usar esta saída como uma junção para a segunda atualização:Alterei sua
WHERE
condição de exemplo para outro campo que nãoid
. Seid
você não precisa dessa fantasiaOUTPUT
, pode apenasUPDATE
a segunda tabela para a mesma coisaid='010008'
.fonte
T1.field
deveria serTable1.field
?Desculpe, você não pode fazer isso. Para atualizar atributos em duas tabelas diferentes, você precisará executar duas instruções separadas. Mas eles podem estar em um lote (um conjunto de SQL enviado ao servidor em uma ida e volta)
fonte
A resposta curta para isso é não. Embora você possa inserir várias tabelas na
from
cláusula de uma instrução de atualização, você pode especificar apenas uma única tabela após aupdate
palavra - chave. Mesmo se você escrever uma visão "atualizável" (que é simplesmente uma visão que segue certas restrições), atualizações como essa falharão. Aqui estão os clipes relevantes da documentação do MSDN (a ênfase é minha).ATUALIZAÇÃO (Transact-SQL)
CRIAR VISTA (Transact-SQL)
Com toda a honestidade, porém, você deve considerar o uso de duas instruções SQL diferentes em uma transação, conforme o exemplo de LBushkin.
ATUALIZAÇÃO: Minha afirmação original de que era possível atualizar várias tabelas em uma exibição atualizável estava errada. No SQL Server 2005 e 2012, ele gerará o seguinte erro. Corrigi minha resposta para refletir isso.
fonte
INSTEAD OF Specifies that the DML trigger is executed instead of the triggering SQL statement, therefore, overriding the actions of the triggering statements. INSTEAD OF cannot be specified for DDL or logon triggers.
Isso funciona para o MySQL e é realmente apenas uma transação implícita, mas deve ser algo como isto:
se você estiver fazendo atualizações em várias tabelas que exigem várias instruções ... o que provavelmente é possível se você atualizar uma, e outra com base em outras condições ... você deve usar uma transação.
fonte
Você deve colocar duas instruções de atualização dentro de uma transação
fonte
Você pode escrever uma instrução de atualização para uma tabela e, em seguida, um acionador na primeira atualização da tabela , que atualiza a segunda tabela
fonte
Da minha perspectiva, você pode fazer isso, é uma atualização individual de duas tabelas no SQL SERVER:
fonte
É tão simples quanto esta consulta mostrada abaixo.
fonte