Enjoy Your SQL MERGE su una table variable - Francesco Quaratino

MERGE su una table variable

Posso applicare l'istruzione MERGE specificando come tabella di destinazione una variabile tabella?

Pare che la risposta sia "Nì". Perchè diventi "Sì" occorre che per la table variable sia definito un alias altrimenti il messaggio di errore sarà il seguente:

Msg 137, Level 16, State 1, Line 16
Must declare the scalar variable "@t".

 

Ecco un esempio "vincente":


create table #t (
    primarycol int primary key,
    col1 int
)
insert #t  values (1, 1), (2, 2), (3, 3)
go

declare @t table (
    primarycol int primary key,
    col1 int,
    col2 int
)

insert @t
values (1, 1, null), (2, 2, null)

merge
    @t Target_Table_Alias
using
    #t
on
    Target_Table_Alias.primarycol = #t.primarycol
when matched then
    update
        set col2 = #t.col1
;

select * from @t
go

drop table #t
go

Filed under: , ,

Comments

# Francesco Quaratino said:

Sempre a proposito del "Merge su una variabile di tipo tabella" - della quale limitazione avevo

martedì 11 novembre 2008 9.56