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

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

  • Tentukan FOR BROWSE untuk memperbolehkan pembaruan saat menampilkan hasil kueri dalam kursor mode penelusuran.
  • Tentukan FOR XML untuk memformat hasil kueri sebagai XML.
  • Tentukan FOR JSON untuk memformat hasil kueri sebagai 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 DB-Library. Anda dapat menelusuri tabel dalam aplikasi jika tabel menyertakan kolom tanda waktu , tabel memiliki indeks unik, dan FOR BROWSE opsi berada di akhir SELECT pernyataan yang dikirim ke instans SQL Server.

Note

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

FOR BROWSE tidak dapat muncul dalam SELECT pernyataan yang UNION bergabung dengan operator.

Note

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

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 FOR BROWSE. Saat Anda mengaktifkan FOR BROWSE opsi untuk menggunakan mode telusur, tabel sementara dibuat.

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

    SET NO_BROWSETABLE ON;
    

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

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

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

  • Indeks unik didefinisikan pada tabel yang ada di sisi OUTER JOIN dalam pernyataan.

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

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

  2. SampleDB Dalam database, buat tleft tabel dan tright tabel yang keduanya berisi satu kolom bernama 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);
    
  4. Aktifkan opsi NO_BROWSETABLE. Untuk melakukan ini, jalankan pernyataan Transact-SQL berikut ini di jendela kueri:

    SET NO_BROWSETABLE ON;
    
  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 OUTER JOIN tright
             ON tleft.c1 = tright.c1
    WHERE tright.c1 <> 2;
    

    Perhatikan output berikut di panel Hasil:

    c1
    ---
    NULL
    NULL
    

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

Note

Jika kolom yang disertakan dalam indeks unik tidak menerima NULL nilai, semua NULL nilai dalam tataan hasil diperkenalkan oleh RIGHT OUTER JOIN pernyataan .

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, Anda harus menulis kueri dengan cara tertentu sehingga mereka menentukan informasi tambahan tentang berlapis yang diinginkan 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 Anda menentukan XMLDATA, skema XDR ditambahkan ke dokumen.

Important

Direktif XMLDATA tidak digunakan lagi. Gunakan pembuatan XSD untuk RAW mode dan AUTO . Tidak ada penggantian untuk direktif XMLDATA dalam EXPLICIT mode. 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 menjalankan 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 seharusnya tidak 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, kueri memetakannya ke atribut XML. Opsi ini hanya didukung dalam RAWmode , AUTO, dan PATH . Untuk informasi selengkapnya, lihat Menggunakan mode RAW dengan FOR XML.

XSINIL

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

ABSENT

Menunjukkan bahwa untuk NULL nilai kolom, elemen XML terkait tidak 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 Anda menyediakan string kosong, 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 PATH dengan FOR XML.

BINER BASE64

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

TYPE

Menentukan bahwa kueri mengembalikan hasil sebagai jenis xml . Untuk informasi selengkapnya, lihat Direktif TYPE di untuk kueri XML.

ROOT [ ('RootName') ]

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

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

Example

Contoh berikut menentukan FOR XML AUTO dengan TYPE opsi dan XMLSCHEMA . Karena opsi , TYPE kueri mengembalikan hasil yang diatur 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 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;

UNTUK JSON

Remarks

Di Fabric Data Warehouse, kueri harus diakhir dengan FOR JSON, sehingga Anda tidak dapat menggunakannya di dalam subkueri.

JSON

Tentukan FOR JSON untuk mengembalikan hasil kueri yang diformat sebagai teks JSON. Anda juga perlu menentukan salah satu mode JSON berikut: AUTO atau PATH. Untuk informasi selengkapnya tentang FOR JSON klausa, lihat Memformat hasil kueri sebagai JSON dengan FOR JSON.

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

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.

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 NULL nilai dalam hasil kueri. Untuk informasi dan contoh selengkapnya, lihat Menyertakan Nilai Null di JSON - opsi INCLUDE_NULL_VALUES.

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.

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 lebih lanjut, lihat Menghapus Kurung Siku dari JSON - WITHOUT_ARRAY_WRAPPER Option.

Untuk informasi selengkapnya, lihat Memformat hasil kueri sebagai JSON dengan FOR JSON.