Pessoal, tenho as seguintes tabelas:
tb1:
DATA COD_Ajustado COD_Original VALOR
01/12/2011 1234 1234 30359,32
01/01/2012 1234 1234 35364,32
01/02/2012 1234 1234 35208,32
01/09/2011 5678 5678 109950
01/09/2011 5678 5678 125631,07
01/10/2011 5678 5678 109900
01/10/2011 5678 5678 135414,4205
tb2:
COD_Original COD_Ajustado
12 1
123 23
1234 456
5678 789
Quero fazer um update na tb1 com os dados da tb2 conforme resultado final abaixo. Ou seja, quero trocar o COD_Ajustado da tb1 pelo COD_Ajustado da tb2, só isso:
DATA COD_Ajustado COD_Original VALOR
01/12/2011 456 1234 30359,32
01/01/2012 456 1234 35364,32
01/02/2012 456 1234 35208,32
01/09/2011 789 5678 109950
01/09/2011 789 5678 125631,07
01/10/2011 789 5678 109900
01/10/2011 789 5678 135414,4205
Eu fiz o óbvio, mas tá errado:
UPDATE tb1 SET COD_Ajustado = (select x.COD_Ajustado from tb2 x inner join tb1 y on x.COD_Ajustado=y.COD_Original)
Mensagem SQLSERVER:
Msg 512, Level 16, State 1, Line 7
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
Alguém sabe como fazer esse update ?
Eu criei um trigger p/ isso, mas, pelo mesmo motivo anterior, está funcionando p/ inserção de só 1 registro por vez:
ALTER TRIGGER [dbo].[trgChanger]
ON [dbo].[tb1]
AFTER INSERT
AS
BEGIN
DECLARE @cod INT = (SELECT COD_Original FROM INSERTED)
IF EXISTS --avalia se há cod_original na tb2 p/ poder fazer a troca
(
SELECT cod_Ajustado FROM tb2 WHERE cod_Original=@cod
)
BEGIN
UPDATE tb1 SET cod_Original=(SELECT cod_Ajustado FROM tb2 WHERE cod_Original=@cod)
END
ELSE
RAISERROR ('Ocorreu falha !.', 16, 10);
END
Resolvendo o UPDATE eu consigo desemperrar esse trigger.
Agradeço quem puder ajudar.