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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin