Bagikan melalui


SELECT - UNTUK Klausul (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance SQL di Microsoft Fabric Warehouse 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 UNTUK TELUSURI.

  • Format hasil kueri sebagai XML dengan menentukan UNTUK XML.

  • Format hasil kueri sebagai JSON dengan menentukan FOR JSON.

Konvensi sintaks transact-SQL

Sintaks

[ 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

JELAJAHI
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.

Catatan

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.

Catatan

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 ketat 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 ketat. 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 ketat 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.

Catatan

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 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 menjadi elemen XML dengan baris pengidentifikasi <generik /> 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.

EKSPLISIT
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.

Penting

Direktif XMLDATA tidak digunakan lagi. Gunakan pembuatan XSD dalam kasus mode RAW dan AUTO. Tidak ada penggantian untuk direktif XMLDATA dalam mode EKSPLISIT. 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 klausul 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 XMLDATA as cast. Solusi ini juga dapat berlaku saat Anda menggunakan FOR JSON PATH. Teknik ini dibahas pada Stack Overflow, dan ditunjukkan dalam contoh Pernyataan SELECT Transact-SQL berikut:

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.

ELEMEN
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 arahan ELEMENTS. Untuk informasi selengkapnya, lihat:

TIDAK HADIR
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 baris> untuk setiap baris dalam tataan hasil. Anda dapat secara opsional menentukan nama elemen untuk pembungkus <elemen baris> . Jika string kosong disediakan, seperti FOR XML PATH ('') ), elemen pembungkus tidak dihasilkan. Menggunakan PATH dapat memberikan alternatif yang lebih sederhana untuk kueri yang ditulis menggunakan arahan EKSPLISIT. 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 OTOMATIS.

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 akar> default <ditambahkan.

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

Untuk Contoh XML

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;  

FOR JSON

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 klausul FOR JSON , lihat Memformat Hasil Kueri sebagai JSON dengan FOR JSON (SQL Server).

AUTO
Memformat output JSON secara otomatis berdasarkan struktur pernyataan SELECT
dengan menentukan UNTUK 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
UNTUK JALUR JSON. 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 klausul FOR JSON . Jika Anda tidak menentukan opsi ROOT , output JSON tidak memiliki elemen root. 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).

Lihat Juga

SELECT (Transact-SQL)