c# - SQL Simulating a foreach -
i have insert 7 rows table each row found in table, doing c# application, dreadfully slow relatively small database.
i want move 1 query, , best method foreach loop, sql doesnt have though while loop have do.
however cant insert part cannot loop through rows, here sql far
declare @cnt int = 0; select resno res tsgrno = 1; print 'row cnt'; print @@rowcount; -- prints 0 though 6 rows returned while @cnt < @@rowcount begin print @cnt; --in here need -- insert tbl (_,tbl.resno,_, _, _) -- values (_,row.resno,_,_,_) set @cnt = @cnt + 1; end
does know better , working way this?
edit:
this @ now
declare @_r1 int = 7, @_date int = 20150608 select * res r not exists ( select * vis_resr rr rr.resno = r.resno , rr.date = @_date ) , r.tsgrno = 1 , r.r1 = @_r1 insert vis_resr (r1, resno, vis_resr.date, frtm, totm) values (@_r1,r.resno,@_date,0,0)
@_r1 , @_date set before sending query, don't understand how make insert using r.resno values
why cannot use select
statement in insert into
?
insert tbl (tbl.resno) select resno res tsgrno = 1
if select
statement return 6 rows, 6 rows inserted
adding rows using insert , select
update after comment:
inserting values if not exist
based on version of sql server can use merge
declare @_r1 int = 7 declare @_date int = 20150608 merge vis_resr target using (select resno res tsgrno = 1 , r1 = @_r1) source on target.resno = source.resno when not matched insert (r1, resno, vis_resr.date, frtm, totm) values (@_r1, source.resno, @_date, 0, 0);
or if sql server version older 2008 try next
declare @_r1 int = 7 declare @_date int = 20150608 insert vis_resr (r1, resno, vis_resr.date, frtm, totm) select @_r1, r.resno, @_date, 0, 0 res r not exists (select * vis_resr rr rr.resno = r.resno , rr.date = @_date ) , r.tsgrno = 1 , r.r1 = @_r1
Comments
Post a Comment