Share via


WITH common_table_expression (Transact-SQL)

Sonuç olarak adlandırılan bir geçici belirtir küme, ortak bir tablo ifade (CTE) olarak bilinir.Bu basit bir sorgudan elde edilen ve tek bir yürütme kapsamında tanımlanan SELECT, INSERT, UPDATE, birleştirme veya DELETE deyim.Bu yan tümce tanımlama, SELECT deyiminin parçası olarak CREATE VIEW deyim içinde de kullanılabilir.Genel bir tablo ifade kendisine başvurular içerebilir.Bu, bir yinelenen genel tablo ifade olarak adlandırılır.

Topic link iconTransact-SQL sözdizimi kuralları

[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>::=
        expression_name [ ( column_name [ ,...n ] ) ]
    AS
        ( CTE_query_definition )

Bağımsız değişkenler

  • expression_name
    İş geçerli bir tanıtıcı genel tablo ifade. expression_nametüm diğer genel tablo deyimin aynı ile tanımlanmış adından farklı olmalıdır<common_table_expression>yan, ancakexpression_nameolabilir aynı adı olarak temel tablo veya Görünüm.Tüm başvuruexpression_namesorgu genel tablo ifade ve kullanır değil temel nesnenin.

  • column_name
    Ortak tablo ifadesinde sütun adını belirtir.Tek bir CTE tanımı içinde yinelenen adlar verilir.Sayısı belirtilen sütun adları, sonuç kümesindeki sütunların sayısı eşleşmelidirCTE_query_definition.Sütun adları, yalnızca elde edilen tüm sütunlar için farklı ad sorgu tanımı içinde sağlanan isteğe bağlı listesidir.

  • CTE_query_definition
    Bir ifadenin sonuçlarını belirtir küme genel tablo ifade doldurur.The deyimCTE_query_definitiondışında bir CTE olamaz tanımlayan bir görünüm oluşturmak için aynı gereksinimlerine uymalıdır başka bir CTE.Daha fazla bilgi için Açıklamalar bölümüne bakın veVIEW (Transact-SQL) CREATE.

    Birden fazlaCTE_query_definitionise, tanımlanan sorgu tanımları bunlardan biri katılması gerekir küme işleçleri: UNION ALL dışında UNION, INTERSECT. veya Yinelenen CTE sorgu tanımlarını kullanma hakkında daha fazla bilgi için aşağıdaki "Açıklamalar" bölümüne bakın veKullanarak ortak tablo deyimleri özyinelemeli sorgular.

Remarks

Oluşturma ve ortak tablo ifadeleri kullanma yönergeleri

Yinelenmeyen genel tablo ifadeler için aşağıdaki yönergeleri uygulayın.Yinelenen genel tablo ifadelerin uygulanan yönergeler için "Yönergeleri için tanımlama ve kullanma yinelenen genel tablo aşağıdaki ifadeleri" konusuna bakın.

  • Bir CTE izlenmesi gereken bir tek SELECT, INSERT, UPDATE tarafından BİRLEŞTİRMEK veya DELETE deyim, bazı veya tüm CTE sütunlarını başvuran.Görünümü tanımlayan deyim bir parçası olarak CREATE VIEW deyim içinde bir CTE da belirtilebilir.

  • Birden çok CTE sorgu tanımı CTE özyinelemesiz tanımlanabilir.Bunlardan biri birleşik tanımları olarak gereken küme işleçleri: UNION ALL, UNION, INTERSECT veya EXCEPT.

  • Bir CTE kendisine başvuruda bulunabilir ve yan tümce ile aynı CTEs'önceden tanımlanmış.İleri başvuru izin verilmez.

  • Birden çok yan tümce ile bir CTE belirterek izin verilmez.Örneğin, birCTE_query_definitionbir alt sorgu içeren sorgu, bir iç içe tanımlayan başka bir CTE. yan tümce ile içeremez

  • Aşağıdaki yan tümceleri kullanılamazCTE_query_definition:

    • COMPUTE veya COMPUTE BY

    • BY ORDER (dışında bir TOP yan tümce belirtilir)

    • İÇİNE

    • Sorgu ipuçları ile seçenek yan tümce

    • XML İÇİN

    • TARAMA İÇİN

  • Bir CTE bir toplu iş parçası olan bir deyimde kullanıldığında, noktalı virgül deyim, önce gelmelidir.

  • Bir CTE başvuran bir sorgu bir imleç tanımlamak için kullanılır.

  • Uzak sunuculardaki tablolara başvurulan CTE.

  • Bir CTE yürütülürken bir CTE başvuran tüm ipuçlarını CTE, alttaki tablo, sorgu görünümlerinde başvuru ipuçları aynı şekilde eriştiğinde bulunduğunda, diğer ipuçları ile çakışabilir.Bu durumda, sorgu hata verir.Daha fazla bilgi için bkz:Görüntüleme ve çözümleme.

  • Bir CTE bir UPDATE deyim hedefi ise ifadesinde CTE yapılan tüm başvurular eşleşmesi gerekir.Örneğin, bir diğer ad from CTE atanmışsa yan tümce, the CTE için tüm diğer başvurular için diğer ad kullanılması gerekir.Belirsiz CTE başvurular birleştirmek beklenmeyen davranış ve istenmeyen sorgu sonuçlar üretebilir.Daha fazla bilgi için bkz:UPDATE (Transact-SQL).

Tanımlama ve ortak yinelenen tablo ifadeleri kullanma yönergeleri

Yinelenen genel tablo ifade tanımlamak için aşağıdaki kurallar uygulanır:

  • Yinelenen CTE tanımı en az iki CTE sorgu tanımı, bir bağlama üyesi ve özyinelemeli üye içermelidir.Birden çok bağlantı üyeleri ve özyinelemeli üyeleri tanımlanabilir; ancak, tüm bağlama üyesi sorgu tanımları önce ilk özyinelemeli üye tanımını konması gerekir.Tüm CTE sorgu tanımlarıCTE kendisini oldukları sürece bağlantı üye.

  • Bağlantı üyeleri gerekir birleştirilmiş bunlardan biri küme işleçleri: UNION ALL, UNION, INTERSECT veya EXCEPT. UNION ALL ise yalnızca yinelenen üye ilk ve son bağlama üyesi arasında ve özyinelemeli olarak birden çok üye birleştirirken izin kümesi işleç.

  • Bağlantı ve özyinelemeli Üyeler'deki sütun sayısı aynı olmalıdır.

  • Yinelenen üye bir sütunun veri türü bağlama üyesi karşılık gelen sütun veri türü ile aynı olması gerekir.

  • The FROM yan tümce, bir yinelenen üye yalnızca saat için CTE başvurması gerekirexpression_name.

  • Aşağıdaki öğelerin izin verilmeyenCTE_query_definitionyinelenen üyesinin:

    • AYRI AYRI SEÇİN

    • GÖRE GRUP

    • SAHİP

    • skaler toplama

    • ÜST

    • LEFT, RIGHT dış birleştirmek (INNER birleştirmek verilir)

    • Alt sorgular

    • Bir ipucu yinelenen başvuru bir CTE uygulanan birCTE_query_definition.

Yinelenen genel tablo ifade kullanmak için aşağıdaki kurallar uygulanır:

  • Tüm sütunlar NULL katılımcı SELECT deyimi tarafından döndürülen sütun null atanabilirlik ne olursa olsun CTE özyinelemeli döndürülen.

  • Yanlış oluşan bir özyinelemeli CTE sonsuz bir döngüye neden olabilir.Örneğin, yinelenen üye sorgu tanımı üst ve alt sütunlar için aynı değerleri döndürür, sonsuz bir döngüye oluşturulur.Sonsuz bir döngüye önlemek için seçenek yan tümcesinde, INSERT, UPDATE, birleştirme, DELETE veya deyim kullanarak MAXRECURSION İpucu ve 0 ile 32,767 arasında bir değer için belirli bir ifadenin izin yineleme düzeylerinin sayısını sınırlayabilirsiniz.Bu kadar döngü oluşturuyor kod sorunu çözmek, deyim yürütülmesi denetlemenize olanak sağlar.Sunucu çapında varsayılan değer 100'dür.0 Belirtilirse, sınır geçerli olur.Başına yalnızca bir MAXRECURSION değeri belirtilebilir deyim.Daha fazla bilgi için bkz:Sorgu ipuçları (Transact-SQL).

  • Yinelenen genel tablo ifade içeren bir görünümü, verileri güncelleştirmek için kullanılamaz.

  • İmleçler CTEs kullanarak sorguları tanımlanabilir.The CTE olanselect_statementbağımsız değişken sonuç tanımlar kümesi imleç.Yalnızca hızlı salt iletme ve statik imleçler (anlık görüntü) için yinelenen CTEs izin verilir.Başka bir imleç türü bir özyinelemeli CTE belirtilirse, imleç türü için statik dönüştürülür.

  • Uzak sunuculardaki tablolara CTE başvuruyor.CTE yinelenen üyesi uzak sunucuya başvuruda bulunulan, tabloları sürekli olarak bir yerel olarak erişilebilir şekilde bir biriktirme uzak her tablo için oluşturulur.CTE sorgu ise, Index biriktirme/yavaş biriktiricileri sorgu planında görüntülenir ve ek yığın ile karşılaştırma olacaktır.Uygun yineleme onaylamak için tek yolu budur.

  • SQL Server 2008 yinelenen bölümü olan CTE Analitik ve toplamak işlevleri için izin vermez.

Örnekler

C.Basit genel bir tablo ifade oluşturma

Aşağıdaki örnek, her Yöneticisi için raporlama çalışan sayısını gösterirAdventure Works Cycles.

B.Sayıları ve rapor Ortalamalar sınırlamak için genel bir tablo ifade kullanma

Aşağıdaki örnek, yöneticilerinin bildirdiği çalışanlar ortalama sayısını gösterir.

C.Genel bir tablo ifade birden çok kez başvuru

Toplam satış siparişleri ve satış siparişinin son tarih aşağıdaki örnekte gösterilmektedirSalesOrderHeaderTablo her satış temsilcisi.İki kez başvurulan çalışan ifadede, the CTE: Satış temsilcisi için seçilen sütunları geri dönün ve yeniden benzer detaylarını satışçının Yöneticisi. almak için saat Satış Temsilcisi hem de yönetici için verileri tek bir satırda döndürülür.

D.Özyineleme birden çok düzeyde görüntülemek için yinelenen genel tablo ifade kullanma

Aşağıdaki örnekte, Yöneticiler ve çalışanlar için rapor hiyerarşik listesini gösterir.

E.Özyineleme iki düzeyde görüntülemek için yinelenen genel tablo ifade kullanma

Aşağıdaki örnek, yöneticileri ve çalışanlar için raporlama gösterir.Döndürülen düzeylerinin sayısını iki olarak sınırlıdır.

F.Hiyerarşik bir listesini görüntülemek için yinelenen genel tablo ifade kullanma

Aşağıdaki örnekte, yönetici ve çalışanlar, ilgili başlık adları ekleyerek örnek C oluşturur.Yöneticiler ve çalışanlar hiyerarşisini, ayrıca her düzey girintileme ile vurgulanır.

G.Bir deyim iptal etmek için MAXRECURSION kullanma

MAXRECURSION hatalı biçimlendirilmiş bir özyinelemeli CTE sonsuz bir döngüye girmesini önlemek için kullanılabilir.Aşağıdaki örnek, kasıtlı olarak sonsuz döngü oluşturur ve kullanırMAXRECURSIONiki yineleme düzeylerinin sayısını sınırlamak için bir ipucu.

USE AdventureWorks;
GO
--Creates an infinite loop
WITH cte (EmployeeID, ManagerID, Title) as
(
    SELECT EmployeeID, ManagerID, Title
    FROM HumanResources.Employee
    WHERE ManagerID IS NOT NULL
  UNION ALL
    SELECT cte.EmployeeID, cte.ManagerID, cte.Title
    FROM cte 
    JOIN  HumanResources.Employee AS e 
        ON cte.ManagerID = e.EmployeeID
)
--Uses MAXRECURSION to limit the recursive levels to 2
SELECT EmployeeID, ManagerID, Title
FROM cte
OPTION (MAXRECURSION 2);
GO

Kodlama hatası düzeltildi sonra MAXRECURSION artık gerekli değildir.Aşağıdaki örnek, düzeltilmiş kodunu gösterir.

H.Seçime bağlı olarak yinelenen ilişki bir ifade içinde'gözden geçirmek için genel bir tablo ifade kullanma

Aşağıdaki örnek, ürün birleştirmeleri ve bileşenleri için bisiklet oluşturmak için gerekli olan hiyerarşisini gösterirProductAssemblyID = 800.

I.Bir UPDATE deyim içinde yinelenen CTE kullanma

Aşağıdaki örnek güncelleştirmeleriVacationHoursdoğrudan veya dolaylı olarak kullanan rapor için tüm çalışanlar için yüzde 25 değeriManagerID 12.Genel tablo ifade doğrudan rapor eden çalışanların hiyerarşik bir listesini verirManagerID 12ve çalışanların kullanan rapor bu çalışanlar, ve böyle devam eder.Yalnızca genel tablo ifade tarafından döndürülen satır değiştirilir.

J.Birden çok bağlantı ve özyinelemeli üye kullanma

Aşağıdaki örnek, belirtilen bir kişinin tüm öncüleri geri dönmek için birden çok bağlantı ve özyinelemeli üye kullanır.Bir tablo oluşturulur ve değerleri özyinelemeli CTE tarafından döndürülen aile soy ağacı oluşturmak için eklenir.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Bir öğeyi bir UPDATE deyim hedefi bir CTE, CTE ad gereklilikleri tanımlayan bölümü 'Oluşturma ve ortak tablo ifadeleri kullanma yönergeleri' eklendi.