Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL 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.
Syntax
Sintaks untuk SQL Server dan 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 ]
}
Sintaks untuk Azure Synapse Analytics dan Gudang Data Paralel.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Sintaks untuk microsoft Fabric Data Warehouse dan titik akhir analitik SQL.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Arguments
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 SELECT pernyataan.
Jika kolom tidak ditentukan, kolom tampilan memperoleh nama yang sama dengan kolom dalam SELECT pernyataan.
Note
Di kolom untuk tampilan, izin untuk nama kolom berlaku di seluruh CREATE VIEW pernyataan atau ALTER VIEW , terlepas dari sumber data yang mendasar. Misalnya, jika izin diberikan pada SalesOrderID kolom dalam pernyataan CREATE VIEW, ALTER VIEW pernyataan dapat memberi nama SalesOrderID kolom 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
Pernyataan SELECT yang mendefinisikan tampilan. Pernyataan dapat menggunakan lebih dari satu tabel dan tampilan lainnya. Izin yang sesuai diperlukan untuk memilih dari objek yang direferensikan dalam SELECT klausa tampilan yang dibuat.
Tampilan tidak harus menjadi subset baris dan kolom dari satu tabel tertentu. Tampilan dapat dibuat yang menggunakan lebih dari satu tabel atau tampilan lain dengan SELECT klausa kompleksitas apa pun.
Dalam definisi tampilan terindeks, SELECT pernyataan harus berupa pernyataan tabel tunggal atau multitabel JOIN dengan agregasi opsional.
Klausa SELECT dalam definisi tampilan tidak dapat mencakup:
Klausa
ORDER BY, kecuali ada jugaTOPklausul dalam daftarSELECTpernyataan yang dipilihImportant
Klausa
ORDER BYhanya digunakan untuk menentukan baris yang dikembalikan olehTOPklausa atauOFFSETdalam definisi tampilan. KlausaORDER BYtidak menjamin hasil yang diurutkan saat tampilan dikueri, kecuali jugaORDER BYditentukan dalam kueri itu sendiri.Kata kunci
INTOKlausa
OPTIONReferensi ke tabel sementara atau variabel tabel.
Karena select_statement menggunakan SELECT pernyataan, valid untuk menggunakan petunjuk gabungan dan petunjuk tabel seperti yang ditentukan dalam FROM klausa. Untuk informasi selengkapnya, lihat FROM (Transact-SQL) dan SELECT (Transact-SQL).
Fungsi dan beberapa SELECT pernyataan yang dipisahkan oleh UNION atau UNION ALL dapat digunakan dalam select_statement.
PERIKSA OPSI
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 pastikan data tetap terlihat melalui tampilan setelah modifikasi diterapkan.
Note
Satu-satunya CHECK OPTION berlaku untuk pembaruan yang dibuat melalui tampilan. Ini tidak berlaku untuk pembaruan apa pun yang dilakukan langsung ke tabel yang mendasar tampilan.
ENCRYPTION
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru dan Azure SQL Database.
Mengenkripsi entri dalam sys.syscomments yang berisi teks CREATE VIEW pernyataan. 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 ALTER TABLE pernyataan pada tabel yang berpartisipasi dalam tampilan yang memiliki pengikatan skema gagal ketika pernyataan ini memengaruhi definisi tampilan.
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 INSTEAD OF INSERT atau INSTEAD OF UPDATE memicu. Untuk informasi selengkapnya tentang tampilan yang dapat diperbarui, lihat Komentar.
Remarks
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 SCHEMABINDING klausa, 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 CREATE VIEW pernyataan 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 dapat disebabkan oleh kesalahan pembulatan selama INSERT, , DELETEatau UPDATE tindakan 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.
Di Azure Synapse Analytics, tampilan tidak mendukung pengikatan skema. Oleh karena itu, jika perubahan dilakukan pada objek yang mendasar, Anda harus menghilangkan dan membuat ulang tampilan untuk me-refresh metadata yang mendasar. Untuk informasi selengkapnya, lihat Tampilan T-SQL dengan kumpulan SQL khusus dan kumpulan SQL tanpa server di Azure Synapse Analytics.
Di Azure Synapse Analytics, tampilan yang dapat diperbarui, pemicu DML (dari jenis AFTER atau INSTEAD OF), 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.
Di Azure Synapse Analytics, 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.
Dalam database Fabric SQL, tampilan dapat dibuat, tetapi tidak dicerminkan ke dalam Fabric OneLake. Untuk informasi selengkapnya, lihat Batasan pencerminan database Fabric SQL.
Tampilan yang dapat diperbarui
Anda dapat mengubah data tabel dasar yang mendasar melalui tampilan, selama kondisi berikut ini benar:
Setiap modifikasi, termasuk
UPDATEpernyataan ,INSERT, danDELETE, 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,SUMMIN,MAX,GROUPING,STDEV, ,STDEVP,VAR, danVARP.Sebuah perhitungan. 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 sedang dimodifikasi tidak terpengaruh oleh
GROUP BYklausa ,HAVING, atauDISTINCT.TOP tidak digunakan di mana saja dalam select_statement tampilan bersama dengan
WITH CHECK OPTIONklausa.
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
INSTEAD OFpemicu dapat dibuat pada tampilan untuk membuat tampilan dapat diperbarui. PemicuINSTEAD OFdijalankan 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 pemicuINSTEAD OFada untuk tampilan pada pernyataan modifikasi data tertentu (INSERT, ,UPDATEatauDELETE), tampilan yang sesuai dapat diperbarui melalui pernyataan tersebut. Untuk informasi selengkapnya tentangINSTEAD OFpemicu, 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
Tampilan yang dipartisi adalah tampilan yang ditentukan oleh tabel anggota yang UNION ALL 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.
Note
Metode yang disukai untuk mempartisi data lokal ke satu server adalah melalui tabel yang dipartisi. Untuk informasi selengkapnya, lihat Tabel dan Indeks yang Dipartisi.
Saat Anda 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
Pilih
listDalam daftar kolom definisi tampilan, pilih semua kolom dalam tabel anggota.
Pastikan bahwa kolom dalam posisi ordinal yang sama dari masing-masing
select listmemiliki jenis yang sama, termasuk kolase. Tidak cukup bagi kolom untuk menjadi jenis yang dapat dikonversi secara implisit, seperti umumnya kasus untukUNION.Selain itu, setidaknya satu kolom (misalnya
<col>) harus muncul di semua daftar pilihan dalam posisi ordinal yang sama. Tentukan<col>dengan cara tabel anggotaT1, ..., Tnmemiliki batasanC1, ..., CnCHECK yang ditentukan pada<col>, masing-masing.Batasan yang
C1ditentukan pada tabelT1harus 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 batasanC1, ..., Cnsehingga batasan membentuk sekumpulan interval yang terputus-putus atau tidak tumpang tindih. Kolom<col>tempat batasan yang terputus-putus ditentukan disebut kolom partisi. Kolom partisi dapat 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 menggunakanCHECK CONSTRAINT *constraint_name*opsiALTER TABLE, dan gunakanWITH CHECKopsi 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.
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.
Tabel anggota, atau tabel yang mendasar
T1, ..., TnTabel 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
UNION ALLpernyataan.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_configureatau pernyataan SET.
Kondisi untuk memodifikasi data dalam tampilan yang dipartisi
Pembatasan berikut berlaku untuk pernyataan yang mengubah data dalam tampilan yang dipartisi:
Pernyataan ini
INSERTmenyediakan nilai untuk semua kolom dalam tampilan, bahkan jika tabel anggota yang mendasar memilikiDEFAULTbatasan untuk kolom tersebut atau jika memungkinkanNULLnilai. Untuk kolom tabel anggota yang memilikiDEFAULTdefinisi, pernyataan tidak dapat secara eksplisit menggunakan kata kunciDEFAULT.Nilai yang dimasukkan ke dalam kolom partisi memenuhi setidaknya salah satu batasan yang mendasar; jika tidak, tindakan sisipkan gagal dengan pelanggaran batasan.
UPDATEpernyataan tidak dapat menentukanDEFAULTkata kunci sebagai nilai dalamSETklausa, meskipun kolom memiliki nilai yangDEFAULTditentukan dalam tabel anggota terkait.Kolom dalam tampilan yang merupakan kolom identitas dalam satu atau beberapa tabel anggota tidak dapat dimodifikasi dengan menggunakan pernyataan
INSERTatauUPDATE.Jika salah satu tabel anggota berisi kolom tanda waktu , data tidak dapat dimodifikasi dengan menggunakan pernyataan
INSERTatauUPDATE.Jika salah satu tabel anggota berisi pemicu atau
ON UPDATE CASCADE/SET NULL/SET DEFAULTbatasanON DELETE CASCADE/SET NULL/SET DEFAULT, tampilan tidak dapat dimodifikasi.INSERT,UPDATE, danDELETEtindakan 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
bcpatauBULK INSERTpernyataan danINSERT ... SELECT * FROM OPENROWSET(BULK...). Namun, Anda dapat menyisipkan beberapa baris ke dalam tampilan yang dipartisi dengan menggunakan pernyataan INSERT .Note
Untuk memperbarui tampilan yang dipartisi, pengguna harus memiliki
INSERTizin ,UPDATE, danDELETEpada 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 mulai menjamin atomitas di semua node yang terpengaruh oleh pembaruan.
Atur
XACT_ABORT SETopsi keONuntukINSERTpernyataan ,UPDATE, atauDELETEagar 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 SET ROWCOUNT opsi diabaikan untuk INSERT, , UPDATEdan DELETE tindakan 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.
CHECK Dengan definisi batasan, prosesor kueri memetakan distribusi nilai kunci di seluruh tabel anggota. Saat pengguna mengeluarkan kueri, prosesor kueri membandingkan peta dengan nilai yang ditentukan dalam WHERE klausa, dan membangun rencana eksekusi dengan jumlah transfer data minimal antar server anggota. Oleh karena itu, jika beberapa tabel anggota 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
INSERTtindakan ke dalam tampilan yang dipartisi harus memberikanNEWID()nilai untuk kolom pengidentifikasi unik . Setiap tindakan UPDATE terhadap kolom uniqueidentifier harus diberikanNEWID()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.
Permissions
Memerlukan izin CREATE VIEW dalam database dan izin UBAH pada skema tempat tampilan sedang dibuat.
Examples
Contoh berikut menggunakan AdventureWorks2025 database atau AdventureWorksDW2025 .
A. Menggunakan CREATE VIEW untuk membuat tampilan
Contoh berikut membuat tampilan dengan menggunakan SELECT pernyataan. Tampilan sederhana sangat membantu ketika kombinasi kolom sering dikueri. Data dari tampilan ini berasal dari HumanResources.Employee tabel dan Person.Person tabel database AdventureWorks2025. 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 AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Gunakan 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. Gunakan DENGAN OPSI CENTANG
Contoh berikut menunjukkan tampilan bernama dbo.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 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 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);
Konten terkait
- ALTER TABLE (Transact-SQL)
- UBAH VIEW (Transact-SQL)
- HAPUS (Transact-SQL)
- DROP VIEW (Transact-SQL)
- SISIPKAN (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)