SELECT - FOR yan tümcesi (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL analiz uç noktasıMicrosoft Fabric'te ambarMicrosoft Fabric'te SQL veritabanı

FOR Sorgu sonuçları için aşağıdaki seçeneklerden birini belirtmek üzere yan tümcesini kullanın.

  • Gözatma modu imlecinde sorgu sonuçlarını görüntülerken güncelleştirmelere izin vermek için belirtin FOR BROWSE .
  • Sorgu sonuçlarını XML olarak biçimlendirmek için belirtin FOR XML .
  • Sorgu sonuçlarını JSON olarak biçimlendirmek için belirtin FOR JSON .

Transact-SQL söz dizimi kuralları

Syntax

[ FOR { BROWSE | <XML> | <JSON> } ]

<XML> ::=
XML
{
    { RAW [ ( 'ElementName' ) ] | AUTO }
    [
        <CommonDirectivesForXML>
        [ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
        [ , ELEMENTS [ XSINIL | ABSENT ]
    ]
  | EXPLICIT
    [
        <CommonDirectivesForXML>
        [ , XMLDATA ]
    ]
  | PATH [ ( 'ElementName' ) ]
    [
        <CommonDirectivesForXML>
        [ , ELEMENTS [ XSINIL | ABSENT ] ]
    ]
}

<CommonDirectivesForXML> ::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]

<JSON> ::=
JSON
{
    { AUTO | PATH }
    [
        [ , ROOT [ ( 'RootName' ) ] ]
        [ , INCLUDE_NULL_VALUES ]
        [ , WITHOUT_ARRAY_WRAPPER ]
    ]

}

GÖZ ATMAK

BROWSE

DB-Library gözatma modu imlecinde verileri görüntülerken güncelleştirmelere izin verildiğini belirtir. Tablo bir zaman damgası sütunu içeriyorsa, tablonun benzersiz bir dizini varsa ve FOR BROWSE seçenek bir SQL Server örneğine gönderilen deyimlerin SELECT sonundaysa bir uygulamadaki tabloya göz atabilirsiniz.

Note

seçeneğini içeren FOR BROWSE bir SELECT deyiminde öğesini kullanamazsınız<lock_hint> HOLDLOCK.

FOR BROWSE işlecin katıldığı deyimlerde SELECTUNION görüntülenemez.

Note

Tablonun benzersiz dizin anahtarı sütunları null atanabilir olduğunda ve tablo dış birleşimin iç tarafında olduğunda, göz atma modu dizini desteklemez.

Gözatma modu, SQL Server tablonuzdaki satırları taramanıza ve tablonuzdaki verileri bir kerede bir satır güncelleştirmenize olanak tanır. Uygulamanızdaki bir SQL Server tablosuna göz atma modunda erişmek için aşağıdaki iki seçenekte birini kullanmanız gerekir:

  • SELECT SQL Server tablonuzdaki verilere erişmek için kullandığınız deyimi anahtar sözcüklerle FOR BROWSEbitmelidir. Gözatma modunu kullanma seçeneğini açtığınızda FOR BROWSE geçici tablolar oluşturulur.

  • Göz atma modunu açmak için aşağıdaki Transact-SQL deyimini NO_BROWSETABLE çalıştırmanız gerekir:

    SET NO_BROWSETABLE ON;
    

    seçeneğini açtığınızda NO_BROWSETABLE , tüm SELECT deyimler seçeneği deyimlere eklenmiş gibi FOR BROWSE davranır. Ancak, NO_BROWSETABLE seçenek genellikle sonuçları uygulamanıza göndermek için kullandığı geçici tabloları FOR BROWSE oluşturmaz.

SQL Server tablolarındaki verilere göz atma modunda bir deyimi içeren OUTER JOIN bir SELECT sorgu kullanarak erişmeye çalıştığınızda ve bir deyimin iç tarafında bulunan tabloda benzersiz bir OUTER JOIN dizin tanımlandığında, gözatma modu benzersiz dizini desteklemez. Gözatma modu yalnızca tüm benzersiz dizin anahtarı sütunları değerleri kabul NULL ettiğinde benzersiz dizini destekler. Aşağıdaki koşullar doğruysa gözatma modu benzersiz dizini desteklemez:

  • Sql Server tablolarındaki verilere göz atma modunda, deyimini içeren OUTER JOIN bir SELECT sorgu kullanarak erişmeye çalışırsınız.

  • Bir deyiminin iç tarafında bulunan tabloda benzersiz bir OUTER JOIN dizin tanımlanır.

Bu davranışı göz atma modunda yeniden oluşturmak için şu adımları izleyin:

  1. SQL Server Management Studio'da adlı SampleDBbir veritabanı oluşturun.

  2. SampleDB Veritabanında bir tablo ve tright her ikisi de adlı c1tek bir sütun içeren bir tablo oluşturuntleft. Tablodaki c1 sütunda tleft benzersiz bir dizin tanımlayın ve sütunu değerleri kabul NULL etmek üzere ayarlayın. Bunu yapmak için uygun bir sorgu penceresinde aşağıdaki Transact-SQL deyimlerini çalıştırın:

    CREATE TABLE tleft (c1 INT NULL UNIQUE);
    GO
    
    CREATE TABLE tright (c1 INT NULL);
    GO
    
  3. Tabloya ve tleft tabloya tright birkaç değer ekleyin. Tabloya bir NULL değer eklediğinizden tleft emin olun. Bunu yapmak için sorgu penceresinde aşağıdaki Transact-SQL deyimlerini çalıştırın:

    INSERT INTO tleft VALUES (2);
    INSERT INTO tleft VALUES (NULL);
    INSERT INTO tright VALUES (1);
    INSERT INTO tright VALUES (3);
    INSERT INTO tright VALUES (NULL);
    
  4. Seçeneğini açın NO_BROWSETABLE . Bunu yapmak için sorgu penceresinde aşağıdaki Transact-SQL deyimlerini çalıştırın:

    SET NO_BROWSETABLE ON;
    
  5. Sorguda tleft dış birleşim deyimini kullanarak tablodaki ve tright tablodaki verilere erişin SELECT . Tablonun dış birleşim deyiminin iç tarafında olduğundan emin tleft olun. Bunu yapmak için sorgu penceresinde aşağıdaki Transact-SQL deyimlerini çalıştırın:

    SELECT tleft.c1
    FROM tleft
         RIGHT OUTER JOIN tright
             ON tleft.c1 = tright.c1
    WHERE tright.c1 <> 2;
    

    Sonuçlar bölmesinde aşağıdaki çıkışa dikkat edin:

    c1
    ---
    NULL
    NULL
    

Gözatma modundaki tablolara erişmek için sorguyu SELECT çalıştırdıktan sonra, sorgunun SELECT sonuç kümesi deyiminin tanımı RIGHT OUTER JOIN nedeniyle tablodaki tleft sütun için c1 iki NULL değer içerir. Bu nedenle, sonuç kümesinde tablodan NULL gelen değerler ile NULL deyiminin tanıttığı değerler RIGHT OUTER JOIN arasında ayrım yapamazsınız. Sorgunun sonuç kümesindeki NULL değerleri yoksayması gerekiyorsa yanlış sonuçlar alabilirsiniz.

Note

Benzersiz dizine dahil edilen sütunlar değerleri kabul NULL etmese, sonuç kümesindeki NULL tüm değerler deyimi tarafından RIGHT OUTER JOIN tanıtılır.

XML için

XML

Sorgu sonuçlarının XML belgesi olarak döndürüleceklerini belirtir. Aşağıdaki XML modlarından biri belirtilmelidir: RAW, AUTO, EXPLICIT. XML verileri ve SQL Server hakkında daha fazla bilgi için bkz. FOR XML (SQL Server).

RAW [ ('ElementName') ]

Sorgu sonucunu alır ve sonuç kümesindeki her satırı, öğe etiketi olarak genel tanımlayıcısı <row /> olan bir XML öğesine dönüştürür. İsteğe bağlı olarak satır öğesi için bir ad belirtebilirsiniz. Sonuçta elde edilen XML çıktısı, her satır için oluşturulan satır öğesi olarak belirtilen ElementName öğesini kullanır. Daha fazla bilgi için bkz. FOR XML ile RAW modunu kullanma.

AUTO

Sorgu sonuçlarını basit, iç içe yerleştirilmiş bir XML ağacında döndürür. Yan tümcesinde FROM en az bir sütunun listelendiği yan tümcesindeki SELECT her tablo bir XML öğesi olarak temsil edilir. Yan tümcesinde SELECT listelenen sütunlar uygun öğe özniteliklerine eşlenir. Daha fazla bilgi için bkz. FOR XML ile AUTO modunu kullanma.

EXPLICIT

Sonuçta elde edilen XML ağacının şeklinin açıkça tanımlandığını belirtir. Bu modu kullanarak, istenen iç içe yerleştirme hakkında açıkça ek bilgi belirtmeleri için sorguları belirli bir şekilde yazmanız gerekir. Daha fazla bilgi için bkz . FOR XML ile AÇıK modu kullanma.

XMLDATA

Satır içi XDR şemasını döndürür, ancak sonuç için kök öğeyi eklemez. belirtirseniz XMLDATA, belgeye XDR şeması eklenir.

Important

XMLDATA yönergesi kullanım dışıdır. ve AUTO modları için RAW XSD oluşturma özelliğini kullanın. modunda yönergesinin XMLDATAEXPLICIT yerini alma. Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

İstenmeyen satır sonlarını gizleme: Yan tümcesini kullanan bir sorgu çalıştırmak için SQL Server Management Studio 'yu FOR XML (SSMS) kullanabilirsiniz. Bazen büyük miktarda XML döndürülür ve tek bir kılavuz hücresinde görüntülenir. XML dizesi tek bir satırda birden fazla SSMS kılavuz hücresi barındırabilir. Bu gibi durumlarda, SSMS tüm XML dizesinin uzun kesimleri arasına satır sonu karakterleri ekleyebilir. Bu tür satır sonları, satırlar arasında bölünmemesi gereken bir alt dizenin ortasında oluşabilir. Bir atama AS XMLDATAkullanarak satır sonlarını önleyebilirsiniz. Bu çözüm, aşağıdaki Transact-SQL örnek FOR JSON PATH deyiminde olduğu gibi kullandığınızda SELECTda geçerli olabilir:

SELECT CAST (
    (SELECT column1,
            column2
    FROM my_table
    FOR XML PATH ('')) AS VARCHAR (MAX)
) AS XMLDATA;

XMLSCHEMA [ ('TargetNameSpaceURI') ]

Satır içi XSD şeması döndürür. Şemada belirtilen ad alanını döndüren bu yönergeyi belirtirken isteğe bağlı olarak bir hedef ad alanı URI'sini belirtebilirsiniz. Daha fazla bilgi için bkz. Satır içi XSD şeması oluşturma.

ÖĞE

Sütunların alt öğe olarak döndürüldüğünü belirtir. Aksi takdirde, sorgu bunları XML öznitelikleriyle eşler. Bu seçenek yalnızca , AUTOve PATH modlarında RAWdesteklenir. Daha fazla bilgi için bkz. FOR XML ile RAW modunu kullanma.

XSINIL

Sütun değerleri için NULLÖzniteliği True olarak ayarlanmış bir öğenin xsi:nil oluşturulduğunu belirtir. Bu seçeneği yalnızca yönergesiyle ELEMENTS belirtebilirsiniz. Daha fazla bilgi için bakınız:

YOK

Sütun değerleri için NULL xml sonucuna karşılık gelen XML öğelerinin eklenmediğini gösterir. Bu seçeneği yalnızca ile ELEMENTSbelirtin.

YOL [ ('ElementName') ]

Sonuç kümesindeki her satır için bir <row> öğe sarmalayıcı oluşturur. İsteğe bağlı olarak, öğe sarmalayıcısı için <row> bir öğe adı belirtebilirsiniz. gibi FOR XML PATH (''))boş bir dize sağlarsanız, sarmalayıcı öğesi oluşturulmaz. kullanmak PATH , yönergesi kullanılarak EXPLICIT yazılan sorgulara daha basit bir alternatif sağlayabilir. Daha fazla bilgi için bkz. FOR XML ile PATH modunu kullanma.

İKILI TABAN64

Sorgunun ikili verileri ikili base64 ile kodlanmış biçimde döndürdüğünü belirtir. ve EXPLICIT modunu kullanarak RAW ikili verileri aldığınızda, bu seçeneği belirtmeniz gerekir. Bu seçenek, modda varsayılan AUTO seçenektir.

TYPE

Sorgunun sonuçları xml türü olarak döndürdüğünü belirtir. Daha fazla bilgi için bkz. FOR XML sorguları içindeki TYPE yönergesi.

ROOT [ ('KökName') ]

Sonuçta elde edilen XML'e tek bir üst düzey öğenin eklendiğini belirtir. İsteğe bağlı olarak oluşturulacak kök öğenin adını belirtebilirsiniz. Kök adı belirtmezseniz, varsayılan <root> öğe eklenir.

Daha fazla bilgi için bkz. FOR XML (SQL Server).

Example

Aşağıdaki örnek ve FOR XML AUTO seçenekleriyle birlikte TYPE belirtirXMLSCHEMA. Seçenek nedeniyle TYPE sorgu, sonuç kümesini istemciye xml türü olarak döndürür. XMLSCHEMA seçeneği, satır içi XSD şemasının döndürülen XML verilerine dahil olduğunu belirtir ve ELEMENTS seçeneği XML sonucunun öğe merkezli olduğunu belirtir.

USE AdventureWorks2025;
SELECT p.BusinessEntityID,
       FirstName,
       LastName,
       PhoneNumber AS Phone
FROM Person.Person AS p
     INNER JOIN Person.PersonPhone AS pph
         ON p.BusinessEntityID = pph.BusinessEntityID
WHERE LastName LIKE 'G%'
ORDER BY LastName, FirstName
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;

JSON için

Remarks

Doku Veri Ambarı'nda sorgu ile FOR JSONbitmelidir, bu nedenle sorguyu alt sorgular içinde kullanamazsınız.

JSON

JSON metni olarak biçimlendirilmiş bir sorgunun sonuçlarını döndürmek için belirtin FOR JSON . Ayrıca aşağıdaki JSON modlarından birini de belirtmeniz gerekir: AUTO veya PATH. yan tümcesi FOR JSON hakkında daha fazla bilgi için bkz. FOR JSON ile sorgu sonuçlarını JSON olarak biçimlendirme.

AUTO

belirterek SELECTJSON çıkışını deyiminin yapısına FOR JSON AUTO göre otomatik olarak biçimlendirin. Daha fazla bilgi ve örnek için bkz. JSON çıkışını AUTO moduyla otomatik olarak biçimlendirme.

PATH

belirterek JSON çıkışının biçimi üzerinde tam denetim elde edin FOR JSON PATH. PATH modu, sarmalayıcı nesneleri oluşturmanızı ve karmaşık özellikleri iç içe yerleştirmenizi sağlar. Daha fazla bilgi ve örnek için bkz. PATH moduyla iç içe JSON çıkışını biçimlendirme.

INCLUDE_NULL_VALUES

yan tümcesi ile seçeneğini belirterek JSON çıkışına NULLINCLUDE_NULL_VALUES değerleri ekleyinFOR JSON. Bu seçeneği belirtmezseniz, çıktı sorgu sonuçlarındaki NULL değerleri için JSON özelliklerini içermez. Daha fazla bilgi ve örnek için bkz. JSON'a Null Değerler Ekleme - INCLUDE_NULL_VALUES Seçeneği.

ROOT [ ('KökName') ]

yan tümcesi ile ROOT seçeneğini belirterek JSON çıkışına FOR JSON tek, en üst düzey bir öğe ekleyin. Seçeneğini belirtmezseniz ROOT , JSON çıkışının kök öğesi yoktur. Daha fazla bilgi ve örnek için bkz. ROOT Seçeneği ile JSON Çıkışına Kök Düğüm Ekleme.

WITHOUT_ARRAY_WRAPPER

yan tümcesi ile WITHOUT_ARRAY_WRAPPER seçeneğini belirterek JSON çıkışını çevreleyen FOR JSON köşeli ayraçları varsayılan olarak kaldırın. Bu seçeneği belirtmezseniz, JSON çıkışı köşeli ayraç içine alınır. WITHOUT_ARRAY_WRAPPER Çıkış olarak tek bir JSON nesnesi oluşturmak için seçeneğini kullanın. Daha fazla bilgi için bkz. Köşeli Ayraçları JSON'dan Kaldırma - WITHOUT_ARRAY_WRAPPER Seçeneği.

Daha fazla bilgi için bkz. FOR JSON ile sorgu sonuçlarını JSON olarak biçimlendirme.