SQL SERVER TUTORIAL IN DEPTH

The blog is to help users about sql server

Others

LightBlog

Breaking

Monday 18 November 2013

How merger works in Sql Server in Database


-------Merge----
--select * from city










--now lets try to insert a new id...Let's do it by stored procedure

alter procedure insertproc
@id int,
@name varchar(70)





as
begin

update city set name=@name where id=@id

if(@@rowcount=0)
begin

insert into city(id,name) values(@id,@name)

end

end

--exec insertproc 6,'calcutta'
--select * from city























------------------------------but this can be done using merge statement--------
merge into city c
using (select 7 id,'lucknow' name) b
on(c.id=b.id)
when matched then
update set name=b.name
when not matched then
insert(id,name)values(b.id,b.name);

--select * from city














merge into city c
using (select 7 id,'lucknowUpdated' name) b
on(c.id=b.id)
when matched then
update set name=b.name
when not matched then
insert(id,name)values(b.id,b.name);


--select * from city







create table citydesination
(
id1 int,
name1 varchar(70)
)

select * from citydesination--no record
--lets insert one record 

insert into citydesination(id1,name1) values(7,'lucknowindestination')

select * from citydesination








--lets insert using merger

merge into citydesination d
using(select id,name from city)b
on (d.id1=b.id)
when matched then
update set name1=b.name
when not matched then
insert (id1,name1)values(b.id,b.name);

select * from citydesination




---------------------------How i used it in my stored procedure in my project-----------------

                     merge into #temp1 t
                     using (select empcode from tbl_SMM_Roster where dtdate >                                     dateadd(dd,-30,getdate())group by empcode)  smm
                     on t.userid=smm.empcode
                     when matched then
                     UPDATE SET [SMM DETAILS] = (select CONVERT(VARCHAR(11),dtDate,6) 
                     from tbl_SMM_Roster WITH(NOLOCK) where empcode=@userid
                     order by dtdate desc
                     OFFSET 0 ROWS
                     FETCH NEXT 1 ROWS ONLY) ;

                     merge into #temp1 t
                     using (select empcode from tbl_VW_Roster where dtdate >                                       dateadd(dd,-30,getdate())group by empcode)  vw
                     on t.userid=vw.empcode
                     when matched then
                     UPDATE SET [GTT DETAILS] = (select CONVERT(VARCHAR(11),dtDate,6) 
                     from tbl_VW_Roster WITH(NOLOCK) where empcode=@userid
                     order by dtdate desc
                     OFFSET 0 ROWS
                     FETCH NEXT 1 ROWS ONLY) ;

-------------------------------------------------------------------------------------

                     


No comments:

Post a Comment

 test