SQL Server'de Transact-SQL kullanarak bir sonuç kümesinde yineleme

Bu makalede, SQL Server'de Transact-SQL kullanarak bir sonuç kümesinde yineleme yapmak için kullanabileceğiniz çeşitli yöntemler açıklanmaktadır.

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 111401

Özet

Bu makalede saklı yordam, tetikleyici veya Transact-SQL toplu işlemindeki imleç benzeri FETCH-NEXT mantığın benzetimini yapmak için kullanabileceğiniz çeşitli yöntemler açıklanmaktadır.

Sonuç KümesiNde Yineleme Yapmak için Transact-SQL Deyimlerini Kullanma

Transact-SQL deyimlerini kullanarak bir sonuç kümesinde yineleme yapmak için kullanabileceğiniz üç yöntem vardır.

Yöntemlerden biri geçici tabloların kullanılmasıdır. Bu yöntemle, ilk SELECT deyiminin anlık görüntüsünü oluşturur ve imleç için temel olarak kullanırsınız. Örneğin:

/********** 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

İkinci yöntem, bir tabloda bir kerede bir satır yürümek için işlevini kullanmaktır min . Bu yöntem, yeni satırın sorguda işlenen geçerli satırdan daha büyük benzersiz bir tanımlayıcıya sahip olması koşuluyla saklı yordam yürütülmeye başladıktan sonra eklenen yeni satırları yakalar. Örneğin:

/********** 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

Not

Hem örnek 1 hem de 2, kaynak tablodaki her satır için benzersiz bir tanımlayıcı olduğunu varsayar. Bazı durumlarda benzersiz tanımlayıcı bulunamayabilir. Böyle bir durum söz konusuysa, geçici tablo yöntemini yeni oluşturulan anahtar sütununu kullanacak şekilde değiştirebilirsiniz. Örneğin:

/********** 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

Başvurular

ROW_NUMBER (Transact-SQL)