Bagikan melalui


SELECT - UNTUK Klausul (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceTitik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Gunakan klausa FOR untuk menentukan salah satu opsi berikut untuk hasil kueri.

  • Perbolehkan pembaruan saat menampilkan hasil kueri dalam kursor mode telusur dengan menentukan FOR BROWSE.

  • Format hasil kueri sebagai XML dengan menentukan FOR XML.

  • Format hasil kueri sebagai JSON dengan menentukan FOR JSON.

Konvensi sintaks transact-SQL

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 ]  
    ]  

}

UNTUK MENELUSURI

BROWSE

Menentukan bahwa pembaruan diizinkan saat melihat data dalam kursor mode penelusuran Pustaka DB. Tabel dapat dijelajahi dalam aplikasi jika tabel menyertakan kolom tanda waktu, tabel memiliki indeks unik, dan opsi FOR BROWSE berada di akhir pernyataan SELECT yang dikirim ke instans SQL Server.

Note

Anda tidak dapat menggunakan <lock_hint> HOLDLOCK dalam pernyataan SELECT yang menyertakan opsi FOR BROWSE.

UNTUK TELUSURI tidak dapat muncul dalam pernyataan SELECT yang digabungkan oleh operator UNION.

Note

Saat kolom kunci indeks unik tabel dapat diubah ke null, dan tabel berada di sisi dalam gabungan luar, indeks tidak didukung oleh mode telusur.

Mode telusur memungkinkan Anda memindai baris dalam tabel SQL Server Anda dan memperbarui data dalam tabel Anda satu baris sekaligus. Untuk mengakses tabel SQL Server di aplikasi Anda dalam mode telusur, Anda harus menggunakan salah satu dari dua opsi berikut:

  • Pernyataan SELECT yang Anda gunakan untuk mengakses data dari tabel SQL Server Anda harus diakhir dengan kata kunci UNTUK TELUSURI. Saat Anda mengaktifkan opsi FOR BROWSE untuk menggunakan mode telusur, tabel sementara dibuat.

  • Anda harus menjalankan pernyataan Transact-SQL berikut untuk mengaktifkan mode telusur dengan menggunakan opsi NO_BROWSETABLE :

    SET NO_BROWSETABLE ON  
    

    Saat Anda mengaktifkan opsi NO_BROWSETABLE , semua pernyataan SELECT berulah seolah-olah opsi FOR BROWSE ditambahkan ke pernyataan. Namun, opsi NO_BROWSETABLE tidak membuat tabel sementara yang umumnya digunakan opsi FOR BROWSE untuk mengirim hasilnya ke aplikasi Anda.

Saat Anda mencoba mengakses data dari tabel SQL Server dalam mode telusuri dengan menggunakan kueri SELECT yang melibatkan pernyataan gabungan luar, dan ketika indeks unik didefinisikan pada tabel yang ada di sisi dalam pernyataan gabungan luar, mode telusuri tidak mendukung indeks unik. Mode telusur mendukung indeks unik hanya ketika semua kolom kunci indeks unik dapat menerima nilai NULL. Mode telusur tidak mendukung indeks unik jika kondisi berikut ini benar:

  • Anda mencoba mengakses data dari tabel SQL Server dalam mode telusuri dengan menggunakan kueri SELECT yang melibatkan pernyataan gabungan luar.

  • Indeks unik didefinisikan pada tabel yang ada di sisi dalam pernyataan gabungan luar.

Untuk mereprodusi perilaku ini dalam mode telusur, ikuti langkah-langkah berikut:

  1. Di SQL Server Management Studio, buat database, bernama SampleDB.

  2. Dalam database SampleDB, buat tabel tleft dan tabel tright yang keduanya berisi satu kolom yang diberi nama c1. Tentukan indeks unik pada kolom c1 dalam tabel tleft, dan atur kolom untuk menerima nilai NULL. Untuk melakukan ini, jalankan pernyataan Transact-SQL berikut ini di jendela kueri yang sesuai:

    CREATE TABLE tleft(c1 INT NULL UNIQUE) ;  
    GO   
    CREATE TABLE tright(c1 INT NULL) ;  
    GO  
    
  3. Sisipkan beberapa nilai dalam tabel tleft dan tabel tright. Pastikan Anda menyisipkan nilai NULL dalam tabel tleft. Untuk melakukan ini, jalankan pernyataan Transact-SQL berikut ini di jendela kueri:

    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. Aktifkan opsi NO_BROWSETABLE. Untuk melakukan ini, jalankan pernyataan Transact-SQL berikut ini di jendela kueri:

    SET NO_BROWSETABLE ON ;  
    GO  
    
  5. Akses data dalam tabel tleft dan tabel tright dengan menggunakan pernyataan gabungan luar dalam kueri SELECT. Pastikan bahwa tabel tleft berada di sisi dalam pernyataan gabungan luar. Untuk melakukan ini, jalankan pernyataan Transact-SQL berikut ini di jendela kueri:

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

    Perhatikan output berikut di panel Hasil:

    c1  
    ---
    NULL  
    NULL  
    

Setelah Anda menjalankan kueri SELECT untuk mengakses tabel dalam mode telusuri, kumpulan hasil kueri SELECT berisi dua nilai NULL untuk kolom c1 dalam tabel tleft karena definisi pernyataan gabungan luar kanan. Oleh karena itu, dalam tataan hasil, Anda tidak dapat membedakan antara nilai NULL yang berasal dari tabel dan nilai NULL yang diperkenalkan oleh pernyataan gabungan luar kanan. Anda mungkin menerima hasil yang salah jika Anda harus mengabaikan nilai NULL dari kumpulan hasil.

Note

Jika kolom yang disertakan dalam indeks unik tidak menerima nilai NULL, semua nilai NULL dalam tataan hasil diperkenalkan oleh pernyataan gabungan luar yang tepat.

UNTUK FORMAT XML

XML

Menentukan bahwa hasil kueri akan dikembalikan sebagai dokumen XML. Salah satu mode XML berikut harus ditentukan: RAW, AUTO, EXPLICIT. Untuk informasi selengkapnya tentang data XML dan SQL Server, lihat UNTUK XML (SQL Server).

RAW [ ('ElementName') ]

Mengambil hasil kueri dan mengubah setiap baris dalam hasil yang diatur ke dalam elemen XML dengan pengidentifikasi generik <row /> sebagai tag elemen. Anda dapat secara opsional menentukan nama untuk elemen baris. Output XML yang dihasilkan menggunakan ElementName yang ditentukan sebagai elemen baris yang dihasilkan untuk setiap baris. Untuk informasi selengkapnya, lihat Menggunakan Mode RAW dengan FOR XML.

AUTO

Mengembalikan hasil kueri di pohon XML berlapis sederhana. Setiap tabel dalam klausa FROM, yang setidaknya satu kolomnya tercantum dalam klausa SELECT, dinyatakan sebagai elemen XML. Kolom yang tercantum dalam klausa SELECT dipetakan ke atribut elemen yang sesuai. Untuk informasi selengkapnya, lihat Menggunakan Mode OTOMATIS dengan FOR XML.

EXPLICIT

Menentukan bahwa bentuk pohon XML yang dihasilkan ditentukan secara eksplisit. Dengan menggunakan mode ini, kueri harus ditulis dengan cara tertentu sehingga informasi tambahan tentang berlapis yang diinginkan ditentukan secara eksplisit. Untuk informasi selengkapnya, lihat Menggunakan Mode EKSPLISIT dengan FOR XML.

XMLDATA

Mengembalikan skema XDR sebaris, tetapi tidak menambahkan elemen akar ke hasilnya. Jika XMLDATA ditentukan, skema XDR ditambahkan ke dokumen.

Important

Direktif XMLDATAyang tidak digunakan lagi. Gunakan pembuatan XSD dalam kasus mode RAW dan AUTO. Tidak ada penggantian untuk direktif XMLDATA dalam mode EXPLICIT. Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Menekan hentian baris yang tidak diinginkan: Anda mungkin menggunakan SQL Server Management Studio (SSMS) untuk mengeluarkan kueri yang menggunakan klausa FOR XML. Terkadang, sejumlah besar XML dikembalikan dan ditampilkan dalam satu sel kisi. String XML bisa lebih panjang dari satu sel kisi SSMS dapat ditahan pada satu baris. Dalam kasus ini, SSMS mungkin menyisipkan karakter pemisah baris di antara segmen panjang dari seluruh string XML. Hentian baris tersebut mungkin terjadi di tengah substring yang tidak boleh dibagi di seluruh baris. Anda dapat mencegah hentian baris dengan menggunakan cast AS XMLDATA. Solusi ini juga dapat berlaku saat Anda menggunakan FOR JSON PATH, seperti dalam contoh SELECT pernyataan Transact-SQL berikut:

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

XMLSCHEMA [ ('TargetNameSpaceURI') ]

Mengembalikan skema XSD sebaris. Anda dapat secara opsional menentukan URI namespace target saat menentukan direktif ini, yang mengembalikan namespace yang ditentukan dalam skema. Untuk informasi selengkapnya, lihat Membuat Skema XSD Sebaris.

ELEMENTS

Menentukan bahwa kolom dikembalikan sebagai subelemen. Jika tidak, atribut tersebut dipetakan ke atribut XML. Opsi ini hanya didukung dalam mode RAW, AUTO, dan PATH. Untuk informasi selengkapnya, lihat Menggunakan Mode RAW dengan FOR XML.

XSINIL

Menentukan bahwa elemen dengan atribut xsi:nil diatur ke True dibuat untuk nilai kolom NULL. Opsi ini hanya dapat ditentukan dengan direktif ELEMENTS. Untuk informasi selengkapnya, lihat:

ABSENT

Menunjukkan bahwa untuk nilai kolom NULL, elemen XML terkait tidak akan ditambahkan dalam hasil XML. Tentukan opsi ini hanya dengan ELEMENTS.

PATH [ ('ElementName') ]

Menghasilkan pembungkus elemen <row> untuk setiap baris dalam tataan hasil. Anda dapat secara opsional menentukan nama elemen untuk pembungkus elemen <row>. Jika string kosong disediakan, seperti FOR XML PATH ('') ), elemen pembungkus tidak dihasilkan. Menggunakan PATH mungkin memberikan alternatif yang lebih sederhana untuk kueri yang ditulis menggunakan arahan EXPLICIT. Untuk informasi selengkapnya, lihat Menggunakan Mode JALUR dengan FOR XML.

BINER BASE64

Menentukan bahwa kueri mengembalikan data biner dalam format yang dikodekan base64 biner. Saat Anda mengambil data biner dengan menggunakan mode RAW dan EXPLICIT, opsi ini harus ditentukan. Ini adalah default dalam mode AUTO.

TYPE

Menentukan bahwa kueri mengembalikan hasil sebagai jenis xml . Untuk informasi selengkapnya, lihat DIREKTIF TIPE di Untuk Kueri XML.

ROOT [ ('RootName') ]

Menentukan bahwa satu elemen tingkat atas ditambahkan ke XML yang dihasilkan. Anda dapat secara opsional menentukan nama elemen akar yang akan dihasilkan. Jika nama akar opsional tidak ditentukan, elemen <root> default ditambahkan.

Untuk informasi selengkapnya, lihat UNTUK XML (SQL Server).

Example

Contoh berikut menentukan FOR XML AUTO dengan TYPE opsi dan XMLSCHEMA . Karena opsi , TYPE kumpulan hasil dikembalikan ke klien sebagai jenis xml . Opsi XMLSCHEMA menentukan bahwa skema XSD sebaris disertakan dalam data XML yang dikembalikan, dan ELEMENTS opsi menentukan bahwa hasil XML berentrik elemen.

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;  

UNTUK JSON

Remarks

Di Gudang Data Fabric, FOR JSON harus menjadi operator terakhir dalam kueri, sehingga tidak diizinkan di dalam subkueri.

JSON

Tentukan FOR JSON untuk mengembalikan hasil kueri yang diformat sebagai teks JSON. Anda juga harus menentukan salah satu mode JSON berikut: AUTO atau PATH. Untuk informasi selengkapnya tentang klausa FOR JSON, lihat Format Hasil Kueri sebagai JSON dengan FOR JSON (SQL Server).

AUTO

Format output JSON secara otomatis berdasarkan struktur pernyataan SELECT dengan menentukan FOR JSON AUTO. Untuk informasi dan contoh selengkapnya, lihat Memformat Output JSON Secara Otomatis dengan Mode OTOMATIS (SQL Server).

PATH

Dapatkan kontrol penuh atas format output JSON dengan menentukan FOR JSON PATH. mode PATH memungkinkan Anda membuat objek pembungkus dan properti kompleks sarang. Untuk informasi dan contoh selengkapnya, lihat Memformat Output JSON Berlapis dengan Mode PATH (SQL Server).

INCLUDE_NULL_VALUES

Sertakan nilai NULL dalam output JSON dengan menentukan opsi INCLUDE_NULL_VALUES dengan klausa FOR JSON. Jika Anda tidak menentukan opsi ini, output tidak menyertakan properti JSON untuk nilai NULL dalam hasil kueri. Untuk informasi dan contoh selengkapnya, lihat Menyertakan Nilai Null dalam Output JSON dengan Opsi INCLUDE_NULL_VALUES (SQL Server).

ROOT [ ('RootName') ]

Tambahkan elemen tingkat atas tunggal ke output JSON dengan menentukan opsi ROOT dengan klausa FOR JSON. Jika Anda tidak menentukan opsi ROOT, output JSON tidak memiliki elemen akar. Untuk informasi dan contoh selengkapnya, lihat Menambahkan Simpul Akar ke Output JSON dengan Opsi ROOT (SQL Server).

WITHOUT_ARRAY_WRAPPER

Hapus tanda kurung siku yang mengelilingi output JSON secara default dengan menentukan opsi WITHOUT_ARRAY_WRAPPER dengan klausa FOR JSON. Jika Anda tidak menentukan opsi ini, output JSON diapit dalam tanda kurung siku. Gunakan opsi WITHOUT_ARRAY_WRAPPER untuk menghasilkan satu objek JSON sebagai output. Untuk informasi selengkapnya, lihat Menghapus Kurung Siku dari Output JSON dengan opsi WITHOUT_ARRAY_WRAPPER (SQL Server).

Untuk informasi selengkapnya, lihat Memformat Hasil Kueri sebagai JSON dengan FOR JSON (SQL Server).