01. maj 2001 - 10:03Der er
11 kommentarer og 1 løsning
Do while...
Hej
Når man har en SQL-streng i en asp kode, kan man bare skrive: do while not streng.eof content........ streng.movenext loop
Også får man listet x antal recordset. Men hvordan gør man ovenstående i en stored procedure alene. Dvs laver et loop i en stored procedure ud fra en select statement.
På forhånd tak.
Jeg giver 300 point for spørgsmålet, fordi at det er rimeligt vigtigt at jeg får et svar.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
declare @next_id int declare @medlemsnr int select @next_id = 0
while @next_id is not null begin select @next_id = min([myid]) from T_2000 where [myid] > @next_id
if @next_id is not null begin select @medlemsnr = medlemsnr from T_2000 where tr_id = @next_id print \'transreg: \'+convert(varchar(10),@medlemsnrtransreg) end
Select @BrugerID = SA.BrugerID, @SkadeanmeldelseNummer = SA.SkadeanmeldelseNummer From tblSkadeanmeldelse SA Left outer join tblBruger BR on SA.BrugerID = BR.BrugerID Where datediff(d, getdate(), SA.MailNotifikation) = 0 And SA.SkadeanmeldelseStatus = \'Igangvaerende\' And SA.SkadeType = 1 And SA.BrugerID > @BrugerID
Select @Brugernavn = Navn, @Email = Email From tblBruger Where BrugerID = @BrugerID
Exec @hr = sp_OACreate \'CDONTS.Newmail\', @object Out If @hr <> 0 Begin Print \"FEJL : Kunne ikke starte CDONTS\" Return End
Exec @hr = sp_OASetProperty @object, \'BodyFormat\', 0 Exec @hr = sp_OASetProperty @object, \'MailFormat\', 0 Exec @hr = sp_OASetProperty @object, \'body\', \'Notifikation omkring skadeanmeldelsenummer:\' Exec @hr = sp_OASetProperty @object, \'body\', @SkadeanmeldelseNummer Exec @hr = sp_OASetProperty @object, \'From\', \'Rådet For Større Færdselsikkerhed\' Exec @hr = sp_OASetProperty @object, \'To\', \'james.gosling@cellnetwork.com\' Exec @hr = sp_OASetProperty @object, \'Subject\', \'Notifikation\' Exec @hr = sp_OAMethod @object, \'send\',NULL If @hr <> 0 Begin print \'FEJL : Kunne ikke sende mail.\' Return End
Exec @hr = sp_OADestroy @object if @hr <> 0 Begin print \'FEJL : Kunne ikke destruere CDONTS.\' Return End
--Debugging print @Email print @SkadeanmeldelseNummer print @hr GO
det lyder som om du har brug for en cursor? Prøv det følgende i Query Analyzer:
-----------8<-----------
USE pubs
GO
DECLARE c_Titles CURSOR FOR SELECT Title FROM Titles
DECLARE @currTitle VARCHAR(80)
OPEN c_Titles
FETCH NEXT FROM c_Titles INTO @currTitle
WHILE (@@FETCH_STATUS = 0) BEGIN -- Så længe @@FETCH_STATUS er lig 0, lykkedes det at hente næste række fra cursoren PRINT @currTitle FETCH NEXT FROM c_Titles INTO @currTitle END
CLOSE c_Titles DEALLOCATE c_Titles
-----------8<-----------
Når du åbner et RecordSet i ADO, åbner du fra databasens synspunkt en cursor.
Nu kan man jo heller ikke lave loops i SQL. Man kan lave loops i Transact-SQL :-) T-SQL er jo netop en procedural udvidelse af SQL, på linie med Oracles PL/SQL og tilsvarende. Sprogets eneste eksistensberettigelse er at lave simple forgreninger, løkker osv.
mwittrock : Kanon svar du har fået point for.. Noget guf jeg kunne bruge.. Tak
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.