Bagikan melalui


CREATE VIEW (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

Membuat tabel virtual yang kontennya (kolom dan baris) ditentukan oleh kueri. Gunakan pernyataan ini untuk membuat tampilan data dalam satu atau beberapa tabel dalam database. Misalnya, tampilan dapat digunakan untuk tujuan berikut:

  • Untuk memfokuskan, menyederhanakan, dan menyesuaikan persepsi yang dimiliki setiap pengguna dari database.

  • Sebagai mekanisme keamanan dengan memungkinkan pengguna mengakses data melalui tampilan, tanpa memberikan izin kepada pengguna untuk langsung mengakses tabel dasar yang mendasar.

  • Untuk menyediakan antarmuka kompatibel mundur untuk meniru tabel yang skemanya telah berubah.

Konvensi sintaks transact-SQL

Sintaks

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]  
  
<view_attribute> ::=
{  
    [ ENCRYPTION ]  
    [ SCHEMABINDING ]  
    [ VIEW_METADATA ]
}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
  
CREATE VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  
  
<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  
-- Syntax for [!INCLUDE [fabric](../../includes/fabric.md)]
  
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  
  
<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  

Argumen

ATAU UBAH

Berlaku untuk: Azure SQL Database dan SQL Server (dimulai dengan SQL Server 2016 (13.x) SP1).

Mengubah tampilan secara kondisional hanya jika sudah ada.

schema_name
Adalah nama skema tempat tampilan berada.

view_name
Adalah nama tampilan. Nama tampilan harus mengikuti aturan untuk pengidentifikasi. Menentukan nama pemilik tampilan bersifat opsional.

column
Adalah nama yang akan digunakan untuk kolom dalam tampilan. Nama kolom hanya diperlukan saat kolom berasal dari ekspresi aritmatika, fungsi, atau konstanta; ketika dua kolom atau lebih mungkin memiliki nama yang sama, biasanya karena gabungan; atau saat kolom dalam tampilan ditentukan nama yang berbeda dari kolom tempat kolom berasal. Nama kolom juga dapat ditetapkan dalam pernyataan SELECT.

Jika kolom tidak ditentukan, kolom tampilan memperoleh nama yang sama dengan kolom dalam pernyataan SELECT.

Catatan

Di kolom untuk tampilan, izin untuk nama kolom berlaku di seluruh pernyataan CREATE VIEW atau ALTER VIEW, terlepas dari sumber data yang mendasar. Misalnya, jika izin diberikan pada kolom SalesOrderID dalam pernyataan CREATE VIEW, pernyataan ALTER VIEW dapat memberi nama kolom SalesOrderID dengan nama kolom yang berbeda, seperti OrderRef, dan masih memiliki izin yang terkait dengan tampilan menggunakan SalesOrderID.

AS

Menentukan tindakan yang akan dilakukan tampilan.

select_statement
Adalah pernyataan SELECT yang menentukan tampilan. Pernyataan dapat menggunakan lebih dari satu tabel dan tampilan lainnya. Izin yang sesuai diperlukan untuk memilih dari objek yang direferensikan dalam klausa SELECT tampilan yang dibuat.

Tampilan tidak harus menjadi subset sederhana dari baris dan kolom dari satu tabel tertentu. Tampilan dapat dibuat yang menggunakan lebih dari satu tabel atau tampilan lain dengan klausa SELECT dari kompleksitas apa pun.

Dalam definisi tampilan terindeks, pernyataan SELECT harus berupa pernyataan tabel tunggal atau JOIN multitabel dengan agregasi opsional.

Klausa SELECT dalam definisi tampilan tidak dapat menyertakan yang berikut ini:

  • Klausa ORDER BY, kecuali ada juga klausul TOP dalam daftar pilih pernyataan SELECT

    Penting

    Klausa ORDER BY hanya digunakan untuk menentukan baris yang dikembalikan oleh klausa TOP atau OFFSET dalam definisi tampilan. Klausa ORDER BY tidak menjamin hasil yang diurutkan saat tampilan dikueri, kecuali ORDER BY juga ditentukan dalam kueri itu sendiri.

  • Kata kunci INTO

  • Klausa OPTION

  • Referensi ke tabel sementara atau variabel tabel.

Karena select_statement menggunakan pernyataan SELECT, valid untuk menggunakan <petunjuk join_hint> dan <table_hint> seperti yang ditentukan dalam klausa FROM. Untuk informasi selengkapnya, lihat FROM (Transact-SQL) dan SELECT (Transact-SQL).

Fungsi dan beberapa pernyataan SELECT yang dipisahkan oleh UNION atau UNION ALL dapat digunakan dalam select_statement.

OPSI CENTANG

Memaksa semua pernyataan modifikasi data yang dijalankan terhadap tampilan untuk mengikuti kriteria yang ditetapkan dalam select_statement. Saat baris dimodifikasi melalui tampilan, WITH CHECK OPTION memastikan data tetap terlihat melalui tampilan setelah modifikasi diterapkan.

Catatan

OPSI CENTANG hanya berlaku untuk pembaruan yang dibuat melalui tampilan. Ini tidak berlaku untuk pembaruan apa pun yang dilakukan langsung ke tabel yang mendasar tampilan.

ENKRIPSI

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru dan Azure SQL Database.

Mengenkripsi entri dalam sys.syscomments yang berisi teks pernyataan CREATE VIEW. Menggunakan WITH ENCRYPTION mencegah tampilan diterbitkan sebagai bagian dari replikasi SQL Server.

SCHEMABINDING

Mengikat tampilan ke skema tabel atau tabel yang mendasar. Ketika SCHEMABINDING ditentukan, tabel dasar atau tabel tidak dapat dimodifikasi dengan cara yang akan memengaruhi definisi tampilan. Definisi tampilan itu sendiri harus terlebih dahulu dimodifikasi atau dihilangkan untuk menghapus dependensi pada tabel yang akan dimodifikasi. Saat Anda menggunakan SCHEMABINDING, select_statement harus menyertakan nama dua bagian (skema.objek) tabel, tampilan, atau fungsi yang ditentukan pengguna yang dirujuk. Semua objek yang dirujuk harus berada dalam database yang sama.

Tampilan atau tabel yang berpartisipasi dalam tampilan yang dibuat dengan klausa SCHEMABINDING tidak dapat dihilangkan kecuali tampilan tersebut dihilangkan atau diubah sehingga tidak lagi memiliki pengikatan skema. Jika tidak, Mesin Database menimbulkan kesalahan. Selain itu, menjalankan pernyataan ALTER TABLE pada tabel yang berpartisipasi dalam tampilan yang memiliki pengikatan skema gagal ketika pernyataan ini memengaruhi definisi tampilan.

Catatan

Di Azure Synapse Analytics, tampilan saat ini tidak mendukung pengikatan skema. Untuk informasi selengkapnya, lihat Tampilan T-SQL dengan kumpulan SQL khusus dan kumpulan SQL tanpa server di Azure Synapse Analytics.

VIEW_METADATA

Menentukan bahwa instans SQL Server akan kembali ke API DB-Library, ODBC, dan OLE DB informasi metadata tentang tampilan, alih-alih tabel dasar atau tabel, saat metadata mode penelusuran diminta untuk kueri yang mereferensikan tampilan. Metadata mode penelusuran adalah metadata tambahan yang dikembalikan instans SQL Server ke API sisi klien ini. Metadata ini memungkinkan API sisi klien untuk menerapkan kursor sisi klien yang dapat diperbarui. Metadata mode penelusuran menyertakan informasi tentang tabel dasar tempat kolom dalam tataan hasil berada.

Untuk tampilan yang dibuat dengan VIEW_METADATA, metadata mode penelusuran mengembalikan nama tampilan dan bukan nama tabel dasar saat menjelaskan kolom dari tampilan dalam tataan hasil.

Saat tampilan dibuat dengan menggunakan WITH VIEW_METADATA, semua kolomnya, kecuali kolom tanda waktu, dapat diperbarui jika tampilan memiliki ALIH-ALIH pemicu INSERT atau ALIH-ALIH PEMBARUAN. Untuk informasi selengkapnya tentang tampilan yang dapat diperbarui, lihat Komentar.

Keterangan

Tampilan hanya dapat dibuat di database saat ini. CREATE VIEW harus menjadi pernyataan pertama dalam batch kueri. Tampilan dapat memiliki maksimum 1.024 kolom.

Saat mengkueri melalui tampilan, Mesin Database memeriksa untuk memastikan bahwa semua objek database yang direferensikan di mana saja dalam pernyataan ada dan bahwa objek tersebut valid dalam konteks pernyataan, dan bahwa pernyataan modifikasi data tidak melanggar aturan integritas data apa pun. Pemeriksaan yang gagal mengembalikan pesan kesalahan. Pemeriksaan berhasil menerjemahkan tindakan ke dalam tindakan terhadap tabel atau tabel yang mendasar.

Jika tampilan bergantung pada tabel atau tampilan yang dihilangkan, Mesin Database menghasilkan pesan kesalahan saat siapa pun mencoba menggunakan tampilan. Jika tabel atau tampilan baru dibuat dan struktur tabel tidak berubah dari tabel dasar sebelumnya untuk mengganti tabel yang dijatuhkan, tampilan kembali menjadi dapat digunakan. Jika tabel baru atau struktur tampilan berubah, tampilan harus dihilangkan dan dibuat ulang.

Jika tampilan tidak dibuat dengan klausa SCHEMABINDING, jalankan sp_refreshview saat perubahan dilakukan pada objek yang mendasari tampilan yang memengaruhi definisi tampilan. Jika tidak, tampilan mungkin menghasilkan hasil yang tidak terduga saat dikueri.

Saat tampilan dibuat, informasi tentang tampilan disimpan dalam tampilan katalog berikut: sys.views, sys.columns, dan sys.sql_expression_dependencies. Teks pernyataan CREATE VIEW disimpan dalam tampilan katalog sys.sql_modules .

Kueri yang menggunakan indeks pada tampilan yang ditentukan dengan ekspresi numerik atau float mungkin memiliki hasil yang berbeda dari kueri serupa yang tidak menggunakan indeks pada tampilan. Perbedaan ini mungkin disebabkan oleh kesalahan pembulatan selama tindakan INSERT, DELETE, atau UPDATE pada tabel yang mendasar.

Mesin Database menyimpan pengaturan SET QUOTED_IDENTIFIER dan SET ANSI_NULLS saat tampilan dibuat. Pengaturan asli ini digunakan untuk mengurai tampilan saat tampilan digunakan. Oleh karena itu, pengaturan sesi klien apa pun untuk SET QUOTED_IDENTIFIER dan SET ANSI_NULLS tidak memengaruhi definisi tampilan saat tampilan diakses.

Tampilan yang Dapat Diperbarui

Catatan

Di Azure Synapse Analytics, tampilan yang saat ini dapat diperbarui, pemicu DML (dari jenis SETELAH atau ALIH-ALIH), dan tampilan yang dipartisi tidak didukung. Untuk informasi selengkapnya, lihat Tampilan T-SQL dengan kumpulan SQL khusus dan kumpulan SQL tanpa server di Azure Synapse Analytics.

Anda dapat mengubah data tabel dasar yang mendasar melalui tampilan, selama kondisi berikut ini benar:

  • Setiap modifikasi, termasuk pernyataan UPDATE, INSERT, dan DELETE, harus mereferensikan kolom hanya dari satu tabel dasar.

  • Kolom yang dimodifikasi dalam tampilan harus langsung mereferensikan data yang mendasar dalam kolom tabel. Kolom tidak dapat diturunkan dengan cara lain, seperti melalui hal berikut:

    • Fungsi agregat: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, dan VARP.

    • Sebuah komputasi. Kolom tidak dapat dihitung dari ekspresi yang menggunakan kolom lain. Kolom yang dibentuk dengan menggunakan operator yang ditetapkan UNION, UNION ALL, CROSSJOIN, EXCEPT, dan INTERSECT berjumlah komputasi dan juga tidak dapat diperbarui.

  • Kolom yang dimodifikasi tidak terpengaruh oleh klausa GROUP BY, HAVING, atau DISTINCT.

  • TOP tidak digunakan di mana saja dalam select_statement tampilan bersama dengan klausa WITH CHECK OPTION.

Pembatasan sebelumnya berlaku untuk subkueri apa pun dalam klausa FROM tampilan, sama seperti yang berlaku untuk tampilan itu sendiri. Umumnya, Mesin Database harus dapat melacak modifikasi secara tidak ambigu dari definisi tampilan ke satu tabel dasar. Untuk informasi selengkapnya, lihat Mengubah Data Melalui Tampilan.

Jika pembatasan sebelumnya mencegah Anda memodifikasi data secara langsung melalui tampilan, pertimbangkan opsi berikut:

  • ALIH-ALIH Pemicu

    ALIH-ALIH pemicu dapat dibuat pada tampilan untuk membuat tampilan dapat diperbarui. Pemicu ALIH-ALIH dijalankan alih-alih pernyataan modifikasi data tempat pemicu ditentukan. Pemicu ini memungkinkan pengguna menentukan serangkaian tindakan yang harus terjadi untuk memproses pernyataan modifikasi data. Oleh karena itu, jika pemicu ALIH-ALIH ada untuk tampilan pada pernyataan modifikasi data tertentu (INSERT, UPDATE, atau DELETE), tampilan yang sesuai dapat diperbarui melalui pernyataan tersebut. Untuk informasi selengkapnya tentang ALIH-ALIH pemicu, lihat Pemicu DML.

  • Tampilan Yang Dipartisi

    Jika tampilan adalah tampilan yang dipartisi, tampilan dapat diperbarui, tunduk pada batasan tertentu. Ketika diperlukan, Mesin Database membedakan tampilan yang dipartisi lokal sebagai tampilan di mana semua tabel yang berpartisipasi dan tampilan berada pada instans SQL Server yang sama, dan tampilan terpartisi terdistribusi sebagai tampilan di mana setidaknya salah satu tabel dalam tampilan berada di server yang berbeda atau jarak jauh.

Tampilan Yang Dipartisi

Catatan

Di Azure Synapse Analytics, tampilan yang saat ini dipartisi tidak didukung. Untuk informasi selengkapnya, lihat Tampilan T-SQL dengan kumpulan SQL khusus dan kumpulan SQL tanpa server di Azure Synapse Analytics.

Tampilan yang dipartisi adalah tampilan yang ditentukan oleh UNION SEMUA tabel anggota yang terstruktur dengan cara yang sama, tetapi disimpan secara terpisah sebagai beberapa tabel dalam instans SQL Server yang sama atau dalam sekelompok instans otonom server SQL Server, yang disebut server database federasi.

Catatan

Metode yang disukai untuk mempartisi data lokal ke satu server adalah melalui tabel yang dipartisi. Untuk informasi selengkapnya, lihat Tabel dan Indeks yang Dipartisi.

Dalam merancang skema partisi, harus jelas data apa yang dimiliki oleh setiap partisi. Misalnya, data untuk Customers tabel didistribusikan dalam tiga tabel anggota di tiga lokasi server: Customers_33 pada Server1, Customers_66 pada Server2, dan Customers_99 pada Server3.

Tampilan yang dipartisi didefinisikan Server1 dengan cara berikut:

--Partitioned view as defined on Server1  
CREATE VIEW Customers  
AS  
--Select from local member table.  
SELECT *  
FROM CompanyData.dbo.Customers_33  
UNION ALL  
--Select from member table on Server2.  
SELECT *  
FROM Server2.CompanyData.dbo.Customers_66  
UNION ALL  
--Select from member table on Server3.  
SELECT *  
FROM Server3.CompanyData.dbo.Customers_99;  

Umumnya, tampilan dikatakan sebagai tampilan yang dipartisi jika dari formulir berikut:

SELECT <select_list1>  
FROM T1  
UNION ALL  
SELECT <select_list2>  
FROM T2  
UNION ALL  
...  
SELECT <select_listn>  
FROM Tn;  

Kondisi untuk Membuat Tampilan Yang Dipartisi

  1. Pilih list

    • Dalam daftar kolom definisi tampilan, pilih semua kolom dalam tabel anggota.

    • Pastikan bahwa kolom dalam posisi ordinal yang sama dari masing-masing select list memiliki jenis yang sama, termasuk kolase. Tidak cukup bagi kolom untuk menjadi jenis yang dapat dikonversi secara implisit, seperti umumnya kasus untuk UNION.

      Selain itu, setidaknya satu kolom (misalnya <col>) harus muncul di semua daftar pilihan dalam posisi ordinal yang sama. Tentukan <col> dengan cara tabel anggota T1, ..., Tn memiliki batasan C1, ..., Cn CHECK yang ditentukan pada <col>, masing-masing.

      Batasan yang C1 ditentukan pada tabel T1 harus dari formulir berikut:

      C1 ::= < simple_interval > [ OR < simple_interval > OR ...]  
      < simple_interval > :: =   
      < col > { < | > | \<= | >= | = < value >}   
      | < col > BETWEEN < value1 > AND < value2 >  
      | < col > IN ( value_list )  
      | < col > { > | >= } < value1 > AND  
      < col > { < | <= } < value2 >  
      
    • Batasan harus sedemikian <col> rupa sehingga nilai tertentu dapat memuaskan, paling banyak, salah satu batasan C1, ..., Cn sehingga batasan membentuk sekumpulan interval yang terputus-putus atau tidak tumpang tindih. Kolom <col> tempat batasan yang terputus-putus ditentukan disebut kolom partisi. Perhatikan bahwa kolom partisi mungkin memiliki nama yang berbeda dalam tabel yang mendasar. Batasan harus dalam keadaan diaktifkan dan tepercaya bagi mereka untuk memenuhi kondisi kolom partisi yang disebutkan sebelumnya. Jika batasan dinonaktifkan, aktifkan kembali pemeriksaan batasan dengan menggunakan opsi CHECK CONSTRAINT constraint_name ALTER TABLE, dan gunakan opsi WITH CHECK untuk memvalidasinya.

      Contoh berikut menunjukkan kumpulan batasan yang valid:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
    • Kolom yang sama tidak dapat digunakan beberapa kali dalam daftar pilih.

  2. Kolom partisi

    • Kolom partisi adalah bagian dari KUNCI PRIMER tabel.

    • Ini tidak dapat berupa kolom komputasi, identitas, default, atau tanda waktu.

    • Jika ada lebih dari satu batasan pada kolom yang sama dalam tabel anggota, Mesin Database mengabaikan semua batasan dan tidak mempertimbangkannya saat menentukan apakah tampilan adalah tampilan yang dipartisi. Untuk memenuhi kondisi tampilan yang dipartisi, pastikan hanya ada satu batasan partisi pada kolom partisi.

    • Tidak ada batasan pada pembaruan kolom partisi.

  3. Tabel anggota, atau tabel yang mendasar T1, ..., Tn

    • Tabel dapat berupa tabel lokal atau tabel dari komputer lain yang menjalankan SQL Server yang dirujuk baik melalui nama empat bagian atau nama berbasis OPENDATASOURCE- atau OPENROWSET. Sintaks OPENDATASOURCE dan OPENROWSET dapat menentukan nama tabel, tetapi bukan kueri pass-through. Untuk informasi selengkapnya, lihat OPENDATASOURCE (Transact-SQL) dan OPENROWSET (Transact-SQL).

      Jika satu atau beberapa tabel anggota bersifat jarak jauh, tampilan disebut tampilan terpartisi terdistribusi, dan kondisi tambahan berlaku. Mereka dijelaskan nanti di bagian ini.

    • Tabel yang sama tidak dapat muncul dua kali dalam kumpulan tabel yang sedang digabungkan dengan pernyataan UNION ALL.

    • Tabel anggota tidak boleh memiliki indeks yang dibuat pada kolom komputasi dalam tabel.

    • Tabel anggota memiliki semua batasan KUNCI PRIMER pada jumlah kolom yang sama.

    • Semua tabel anggota dalam tampilan memiliki pengaturan padding ANSI yang sama. Ini dapat diatur dengan menggunakan opsi opsi pengguna di sp_configure atau pernyataan SET.

Kondisi untuk Memodifikasi Data dalam Tampilan Yang Dipartisi

Pembatasan berikut berlaku untuk pernyataan yang mengubah data dalam tampilan yang dipartisi:

  • Pernyataan INSERT menyediakan nilai untuk semua kolom dalam tampilan, bahkan jika tabel anggota yang mendasar memiliki batasan DEFAULT untuk kolom tersebut atau jika memungkinkan nilai null. Untuk kolom tabel anggota yang memiliki definisi DEFAULT, pernyataan tidak dapat secara eksplisit menggunakan kata kunci DEFAULT.

  • Nilai yang dimasukkan ke dalam kolom partisi memenuhi setidaknya salah satu batasan yang mendasar; jika tidak, tindakan sisipkan akan gagal dengan pelanggaran batasan.

  • Pernyataan UPDATE tidak dapat menentukan kata kunci DEFAULT sebagai nilai dalam klausa SET, meskipun kolom memiliki nilai DEFAULT yang ditentukan dalam tabel anggota terkait.

  • Kolom dalam tampilan yang merupakan kolom identitas dalam satu atau beberapa tabel anggota tidak dapat dimodifikasi dengan menggunakan pernyataan INSERT atau UPDATE.

  • Jika salah satu tabel anggota berisi kolom tanda waktu, data tidak dapat dimodifikasi dengan menggunakan pernyataan INSERT atau UPDATE.

  • Jika salah satu tabel anggota berisi pemicu atau BATASAN DEFAULT ON UPDATE CASCADE/SET NULL/SET atau ON DELETE CASCADE/SET NULL/SET DEFAULT, tampilan tidak dapat diubah.

  • Tindakan INSERT, UPDATE, dan DELETE terhadap tampilan yang dipartisi tidak diizinkan jika ada gabungan mandiri dengan tampilan yang sama atau dengan salah satu tabel anggota dalam pernyataan.

  • Mengimpor data secara massal ke dalam tampilan yang dipartisi tidak didukung oleh bcp atau SISIPAN MASSAL dan SISIPKAN ... SELECT * FROM OPENROWSET(BULK...) pernyataan. Namun, Anda dapat menyisipkan beberapa baris ke dalam tampilan yang dipartisi dengan menggunakan pernyataan INSERT .

    Catatan

    Untuk memperbarui tampilan yang dipartisi, pengguna harus memiliki izin INSERT, UPDATE, dan DELETE pada tabel anggota.

Kondisi Tambahan untuk Tampilan Terpartisi Terdistribusi

Untuk tampilan yang dipartisi terdistribusi (saat satu atau beberapa tabel anggota jarak jauh), ketentuan tambahan berikut berlaku:

  • Transaksi terdistribusi akan mulai menjamin atomitas di semua simpul yang terpengaruh oleh pembaruan.

  • Atur opsi set XACT_ABORT ke AKTIF agar pernyataan INSERT, UPDATE, atau DELETE berfungsi.

  • Setiap kolom dalam tabel jarak jauh jenis smallmoney yang direferensikan dalam tampilan yang dipartisi dipetakan sebagai uang. Oleh karena itu, kolom yang sesuai (dalam posisi ordinal yang sama dalam daftar pilih) dalam tabel lokal juga harus berjenis uang.

  • Di bawah tingkat kompatibilitas database 110 dan yang lebih tinggi, kolom apa pun dalam tabel jarak jauh jenis smalldatetime yang direferensikan dalam tampilan yang dipartisi dipetakan sebagai smalldatetime. Kolom yang sesuai (dalam posisi ordinal yang sama dalam daftar pilih) dalam tabel lokal harus smalldatetime. Ini adalah perubahan perilaku dari versi SQL Server sebelumnya di mana kolom apa pun dalam tabel jarak jauh jenis smalldatetime yang direferensikan dalam tampilan yang dipartisi dipetakan sebagai tanggalwaktu dan kolom terkait dalam tabel lokal harus dari jenis tanggalwaktu. Untuk informasi selengkapnya, lihat MENGUBAH Tingkat Kompatibilitas DATABASE (Transact-SQL).

  • Server tertaut apa pun dalam tampilan yang dipartisi tidak dapat menjadi server tertaut loopback. Ini adalah server tertaut yang menunjuk ke instans SQL Server yang sama.

Pengaturan opsi SET ROWCOUNT diabaikan untuk tindakan INSERT, UPDATE, dan DELETE yang melibatkan tampilan partisi yang dapat diperbarui dan tabel jarak jauh.

Saat tabel anggota dan definisi tampilan yang dipartisi ada, pengoptimal kueri SQL Server membangun rencana cerdas yang menggunakan kueri secara efisien untuk mengakses data dari tabel anggota. Dengan definisi batasan CHECK, prosesor kueri memetakan distribusi nilai kunci di seluruh tabel anggota. Saat pengguna mengeluarkan kueri, prosesor kueri membandingkan peta dengan nilai yang ditentukan dalam klausa WHERE, dan membangun rencana eksekusi dengan jumlah transfer data minimal antar server anggota. Oleh karena itu, meskipun beberapa tabel anggota mungkin terletak di server jarak jauh, instans SQL Server menyelesaikan kueri terdistribusi sehingga jumlah data terdistribusi yang harus ditransfer minimal.

Pertimbangan untuk Replikasi

Untuk membuat tampilan yang dipartisi pada tabel anggota yang terlibat dalam replikasi, pertimbangan berikut berlaku:

  • Jika tabel yang mendasar terlibat dalam replikasi penggabungan atau replikasi transaksional dengan memperbarui langganan, pastikan bahwa kolom pengidentifikasi unik juga disertakan dalam daftar pilih.

    Setiap tindakan INSERT ke dalam tampilan yang dipartisi harus memberikan nilai NEWID() untuk kolom pengidentifikasi unik. Setiap tindakan UPDATE terhadap kolom uniqueidentifier harus menyediakan NEWID() sebagai nilai karena kata kunci DEFAULT tidak dapat digunakan.

  • Replikasi pembaruan yang dibuat dengan menggunakan tampilan sama seperti ketika tabel direplikasi dalam dua database yang berbeda: tabel dilayani oleh agen replikasi yang berbeda dan urutan pembaruan tidak dijamin.

Izin

Memerlukan izin CREATE VIEW dalam database dan izin UBAH pada skema tempat tampilan sedang dibuat.

Contoh

Contoh berikut menggunakan AdventureWorks2022 database atau AdventureWorksDW2022 .

J. Menggunakan CREATE VIEW sederhana

Contoh berikut membuat tampilan dengan menggunakan pernyataan sederhana SELECT . Tampilan sederhana sangat membantu ketika kombinasi kolom sering dikueri. Data dari tampilan ini berasal dari HumanResources.Employee tabel dan Person.Person database AdventureWorks2022. Data ini menyediakan informasi nama dan tanggal sewa untuk karyawan Adventure Works Cycles. Tampilan dapat dibuat untuk orang yang bertanggung jawab atas pelacakan ulang pekerjaan tetapi tanpa memberi orang ini akses ke semua data dalam tabel ini.

CREATE VIEW hiredate_view  
AS   
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate  
FROM HumanResources.Employee e   
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  
  

B. Menggunakan DENGAN ENKRIPSI

Contoh berikut menggunakan WITH ENCRYPTION opsi dan memperlihatkan kolom komputasi, kolom yang diganti namanya, dan beberapa kolom.

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru dan SQL Database.

CREATE VIEW Purchasing.PurchaseOrderReject  
WITH ENCRYPTION  
AS  
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,   
    RejectedQty / ReceivedQty AS RejectRatio, DueDate  
FROM Purchasing.PurchaseOrderDetail  
WHERE RejectedQty / ReceivedQty > 0  
AND DueDate > CONVERT(DATETIME,'20010630',101) ;  
GO  
  

C. Menggunakan WITH CHECK OPTION

Contoh berikut menunjukkan tampilan bernama SeattleOnly yang mereferensikan lima tabel dan memungkinkan modifikasi data hanya berlaku untuk karyawan yang tinggal di Seattle.

CREATE VIEW dbo.SeattleOnly  
AS  
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode  
FROM HumanResources.Employee e  
INNER JOIN Person.Person p  
ON p.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN Person.BusinessEntityAddress bea   
    ON bea.BusinessEntityID = e.BusinessEntityID   
    INNER JOIN Person.Address a   
    ON a.AddressID = bea.AddressID  
    INNER JOIN Person.StateProvince sp   
    ON sp.StateProvinceID = a.StateProvinceID  
WHERE a.City = 'Seattle'  
WITH CHECK OPTION ;  
GO  

D. Menggunakan fungsi bawaan dalam tampilan

Contoh berikut menunjukkan definisi tampilan yang menyertakan fungsi bawaan. Saat menggunakan fungsi, Anda harus menentukan nama kolom untuk kolom turunan.

CREATE VIEW Sales.SalesPersonPerform  
AS  
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales  
FROM Sales.SalesOrderHeader  
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)  
GROUP BY SalesPersonID;  
GO  

E. Menggunakan data yang dipartisi

Contoh berikut menggunakan tabel bernama SUPPLY1, , SUPPLY2SUPPLY3, dan SUPPLY4. Tabel ini sesuai dengan tabel pemasok dari empat kantor, yang terletak di berbagai negara/wilayah.

--Create the tables and insert the values.  
CREATE TABLE dbo.SUPPLY1 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY2 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY3 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY4 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),  
supplier CHAR(50)  
);  
GO  
--Create the view that combines all supplier tables.  
CREATE VIEW dbo.all_supplier_view  
WITH SCHEMABINDING  
AS  
SELECT supplyID, supplier  
  FROM dbo.SUPPLY1  
UNION ALL  
SELECT supplyID, supplier  
  FROM dbo.SUPPLY2  
UNION ALL  
SELECT supplyID, supplier  
  FROM dbo.SUPPLY3  
UNION ALL  
SELECT supplyID, supplier  
  FROM dbo.SUPPLY4;  
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')    
, ('231', 'FarEast'), ('280', 'NZ')  
, ('321', 'EuroGroup'), ('442', 'UKArchip')  
, ('475', 'India'), ('521', 'Afrique');  
GO  

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

F. Membuat tampilan sederhana

Contoh berikut membuat tampilan dengan memilih hanya beberapa kolom dari tabel sumber.

CREATE VIEW DimEmployeeBirthDates AS  
SELECT FirstName, LastName, BirthDate   
FROM DimEmployee;  

G. Membuat tampilan dengan menggabungkan dua tabel

Contoh berikut membuat tampilan dengan menggunakan SELECT pernyataan dengan OUTER JOIN. Hasil kueri gabungan mengisi tampilan.

CREATE VIEW view1  
AS 
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey, 
  fis.SalesTerritoryKey, dst.SalesTerritoryRegion  
FROM FactInternetSales AS fis   
LEFT OUTER JOIN DimSalesTerritory AS dst   
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);  

Lihat Juga

ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL)
DELETE (Transact-SQL)
DROP VIEW (Transact-SQL)
INSERT (Transact-SQL)
Membuat Prosedur Tersimpan
sys.dm_sql_referenced_entities (T-SQL)
sys.dm_sql_referencing_entities (T-SQL)
sp_help (T-SQL)
sp_helptext (T-SQL)
sp_refreshview (T-SQL)
sp_rename (T-SQL)
sys.views (Transact-SQL)
UPDATE (Transact-SQL)
EVENTDATA (Transact-SQL)