Aracılığıyla paylaş


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ı

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

  • belirterek FOR BROWSEgöz atma modu imlecinde sorgu sonuçlarını görüntülerken güncelleştirmelere izin verin.

  • belirterek sorgu sonuçlarını XML olarak biçimlendirin FOR XML.

  • belirterek sorgu sonuçlarını JSON olarak biçimlendirin 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 verileceği belirtir. Tablo bir zaman damgası sütunu içeriyorsa, tablo benzersiz bir dizine sahipse ve FOR BROWSE seçeneği bir SQL Server örneğine gönderilen SELECT deyimlerinin sonundaysa, bir uygulamada tabloya göz atılabilir.

Note

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

FOR BROWSE, UNION işleci tarafından birleştirilen SELECT deyimlerinde görüntülenemez.

Note

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

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:

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

  • NO_BROWSETABLE seçeneğini kullanarak gözatma modunu açmak için aşağıdaki Transact-SQL deyimini çalıştırmanız gerekir:

    SET NO_BROWSETABLE ON  
    

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

Sql Server tablolarındaki verilere göz atma modunda dış birleşim deyimi içeren bir SELECT sorgusu kullanarak erişmeye çalıştığınızda ve dış birleştirme deyiminin iç tarafında bulunan tabloda benzersiz bir 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 dış birleşim deyimi içeren bir SELECT sorgusu kullanarak erişmeye çalışırsınız.

  • Dış birleştirme deyiminin iç tarafında bulunan tabloda benzersiz bir 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 tleft her ikisi de adlı trighttek bir sütun içeren bir tablo oluşturunc1. 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) ;  
    GO  
    
  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 ;  
    GO  
    
  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 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 modunda tablolara erişmek için sorguyu SELECT çalıştırdıktan sonra, sorgunun SELECT sonuç kümesi sağ dış birleştirme deyiminin tanımı nedeniyle tablodaki NULL sütun için c1 iki tleft değer içerir. Bu nedenle, sonuç kümesinde tablodan NULL gelen değerleri ve sağ dış birleşim deyiminin NULL tanıttığı değerleri ayırt edemezsiniz. Sonuç kümesindeki NULL değerleri yoksaymak zorundaysanız yanlış sonuçlar alabilirsiniz.

Note

Benzersiz dizine dahil edilen sütunlar değerleri kabul NULL etmediyse, sonuç kümesindeki tüm NULL değerler sağ dış birleşim deyimi tarafından 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 Modu 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 Mode kullanma.

EXPLICIT

Sonuçta elde edilen XML ağacının şeklinin açıkça tanımlandığını belirtir. Bu mod kullanıldığında, istenen iç içe yerleştirme hakkında ek bilgilerin açıkça belirtilmesi için sorguların belirli bir şekilde yazılması 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. belirtilirse XMLDATA , belgeye XDR şeması eklenir.

Important

XMLDATA yönergesi kullanım dışıdır. RAW ve AUTO modları söz konusu olduğunda XSD oluşturma özelliğini kullanın. modunda yönergesi XMLDATAEXPLICIT için bir değişiklik yoktur. 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 FOR XML kullanan bir sorgu vermek için SQL Server Management Studio (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, XML özniteliklerine eşlenirler. Bu seçenek yalnızca ve RAW modlarında AUTOPATHdesteklenir. Daha fazla bilgi için bkz. FOR XML ile RAW Modu kullanma.

XSINIL

Sütun değerleri için xsi:nilözniteliği True olarak ayarlanmış bir öğenin NULL oluşturulduğunu belirtir. Bu seçenek yalnızca yönergesiyle ELEMENTS belirtilebilir. 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 ELEMENTS ile belirtin.

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ğlanırsa, 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 Modu'nu kullanma.

İKILI TABAN64

Sorgunun ikili verileri ikili base64 ile kodlanmış biçimde döndürdüğünü belirtir. ve RAW modunu kullanarak EXPLICIT ikili verileri aldığınızda, bu seçenek belirtilmelidir. Bu, modda varsayılandır AUTO .

TYPE

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

ROOT [ ('KökName') ]

Sonuçta elde edilen XML'e tek bir üst düzey öğenin ekleneceğini belirtir. İsteğe bağlı olarak oluşturulacak kök öğe adını belirtebilirsiniz. İsteğe bağlı kök ad belirtilmezse, 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 sonuç kümesi istemciye xml türü olarak döndürülü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 AdventureWorks2022;  
GO  
SELECT p.BusinessEntityID, FirstName, LastName, PhoneNumber AS Phone  
FROM Person.Person AS p  
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

Fabric Veri Ambarı'nda sorgudaki FOR JSON son işleç olmalıdır ve bu nedenle alt sorgularda izin verilmemektedir.

JSON

JSON metni olarak biçimlendirilmiş bir sorgunun sonuçlarını döndürmek için FOR JSON belirtin. 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 (SQL Server) 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 Modu (SQL Server) ile 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 Modu (SQL Server) ile İç İçe JSON Çıktısı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, çıkış sorgu sonuçlarındaki değerler için NULL JSON özelliklerini içermez. Daha fazla bilgi ve örnek için bkz. INCLUDE_NULL_VALUES Seçeneği (SQL Server) ile JSON Çıkışına Null Değerler Ekleme.

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. KÖK Seçeneği (SQL Server) 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. WITHOUT_ARRAY_WRAPPER Seçeneği (SQL Server) ile JSON Çıkışından Köşeli AyraçLarı Kaldırma.

Daha fazla bilgi için bkz. FOR JSON (SQL Server) ile Sorgu Sonuçlarını JSON Olarak Biçimlendirme.