Cursor looper i Stored Procedure
Jeg har følgende kode, og det kan sikkert laves anderledes. Lige nu vil jeg bare gerne blive klogere.Databasen er MsSQL 2000 (@bolig_ref, @requestresult og @transnavn er parametre):
-- start transaction @TransNavn
declare billeder_cursor cursor for
select b.ref as billeder_ref, bc.ref as billedercache_ref, bc.operation, bc.result from billeder b
left join billedercache bc on (bc.billeder_ref = b.ref)
where (b.bolig_ref = @bolig_ref)
declare @billeder_ref integer
declare @billedercache_ref integer
declare @operation integer
declare @result integer
declare @ErrorNo integer
set @ErrorNo = 0
open billeder_cursor
fetch next from billeder_cursor into @billeder_ref, @billedercache_ref, @operation, @result
while (@@fetch_status = 0)
begin
if (@billedercache_ref is null) or ((@billedercache_ref is not null) and (@result <> 0))
begin
insert into billedercache (billeder_ref, operation, result) values (@billeder_ref, 5, -1)
set @ErrorNo = @@error
end
fetch next from billeder_cursor into @billeder_ref, @billedercache_ref, @operation, @result
end
close billeder_cursor
deallocate billeder_cursor
if @ErrorNo = 0
begin
set @requestresult = 1
-- commit work @TransNavn
end
else begin
set @requestresult = 0
-- rollback work @TransNavn
end
1. Skidtet looper hvis proceduren forsøger at indsætte record i tabellen. Er det fordi det er samme tabel som cursoren har fingrene nede i? Ligeså snart jeg kommenterer "insert into" ud virker det.
2. Vil gerne have lidt transaktionsstyring på det (her kommenteret ud). Er det den rigtige opbygning jeg har forsøgt eller er der smartere?
3. Behøver jeg føre et transaktionsnavn med som parameter for at holde transaktionen unik/lokal?