Een resultatenset herhalen met behulp van Transact-SQL in SQL Server
In dit artikel worden verschillende methoden beschreven die u kunt gebruiken om een resultatenset te doorlopen met behulp van Transact-SQL in SQL Server.
Originele productversie: SQL Server
Origineel KB-nummer: 111401
Samenvatting
In dit artikel worden verschillende methoden beschreven die u kunt gebruiken om een cursorachtige FETCH
-NEXT
logica te simuleren in een opgeslagen procedure, trigger of Transact-SQL-batch.
Transact-SQL-instructies gebruiken om een resultatenset te doorlopen
Er zijn drie methoden die u kunt gebruiken om een resultatenset te herhalen met behulp van Transact-SQL-instructies.
Een methode is het gebruik van tijdelijke tabellen. Met deze methode maakt u een momentopname van de eerste SELECT
instructie en gebruikt u deze als basis voor cursoring. Bijvoorbeeld:
/********** example 1 **********/
DECLARE @au_id char( 11 )
SET rowcount 0
SELECT * INTO #mytemp FROM authors
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
WHILE @@rowcount <> 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE au_id = @au_id
DELETE #mytemp WHERE au_id = @au_id
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
END
SET rowcount 0
Een tweede methode is om de min
functie te gebruiken om een tabel rij voor rij te doorlopen. Met deze methode worden nieuwe rijen vastgelegd die zijn toegevoegd nadat de opgeslagen procedure is gestart, op voorwaarde dat de nieuwe rij een unieke id heeft die groter is dan de huidige rij die in de query wordt verwerkt. Bijvoorbeeld:
/********** example 2 **********/
DECLARE @au_id char( 11 )
SELECT @au_id = min( au_id ) FROM authors
WHILE @au_id IS NOT NULL
BEGIN
SELECT * FROM authors WHERE au_id = @au_id
SELECT @au_id = min( au_id ) FROM authors WHERE au_id > @au_id
END
Opmerking
In zowel voorbeeld 1 als voorbeeld 2 wordt ervan uitgegaan dat er een unieke id bestaat voor elke rij in de brontabel. In sommige gevallen bestaat er mogelijk geen unieke id. Als dat het geval is, kunt u de tijdelijke tabelmethode wijzigen om een zojuist gemaakte sleutelkolom te gebruiken. Bijvoorbeeld:
/********** example 3 **********/
SET rowcount 0
SELECT NULL mykey, * INTO #mytemp FROM authors
SET rowcount 1
UPDATE #mytemp SET mykey = 1
WHILE @@rowcount > 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE mykey = 1
DELETE #mytemp WHERE mykey = 1
SET rowcount 1
UPDATE #mytemp SET mykey = 1
END
SET rowcount 0
Verwijzingen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor