Aracılığıyla paylaş


GÖRÜNÜM OLUŞTUR (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

İçeriği (sütunlar ve satırlar) sorgu tarafından tanımlanan bir sanal tablo oluşturur. Veritabanındaki bir veya daha fazla tablodaki verilerin görünümünü oluşturmak için bu deyimi kullanın. Örneğin, bir görünüm aşağıdaki amaçlarla kullanılabilir:

  • Her kullanıcının veritabanı algısına odaklanmak, basitleştirmek ve özelleştirmek için.

  • Kullanıcıların temel alınan temel tablolara doğrudan erişmesine izin vermeden, kullanıcıların görünüm üzerinden verilere erişmesine izin veren bir güvenlik mekanizması olarak.

  • Değişmiş bir şemaya sahip tabloyu taklit etmek için geriye dönük uyumlu bir arabirim sağlamak.

Transact-SQL söz dizimi kuralları

Syntax

SQL Server ve Azure SQL Veritabanı için söz dizimi.

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

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

CREATE VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  

Microsoft Fabric Veri Ambarı ve SQL analiz uç noktası söz dizimi.

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

VEYA ALTER

Şunlar için geçerlidir: Azure SQL Veritabanı ve SQL Server (SQL Server 2016 (13.x) SP1 ile başlayarak).

Yalnızca zaten mevcutsa görünümü koşullu olarak değiştirir.

schema_name
Görünümün ait olduğu şemanın adıdır.

view_name
Görünümün adıdır. Görünüm adları, tanımlayıcılar için kurallara uymalıdır. Görünüm sahibi adını belirtmek isteğe bağlıdır.

column
Görünümdeki bir sütun için kullanılacak addır. Sütun adı yalnızca bir sütun aritmetik ifadeden, işlevden veya sabitten türetildiğinde gereklidir; iki veya daha fazla sütunun adı normalde birleştirme nedeniyle aynı olabilirken; veya bir görünümdeki bir sütun, türetildiği sütunun adından farklı bir ad belirtildiğinde. Sütun adları deyiminde SELECT de atanabilir.

Sütun belirtilmezse, görünüm sütunları deyimindeki sütunla SELECT aynı adları alır.

Note

Görünümün sütunlarında sütun adı izinleri, temel alınan verilerin kaynağından bağımsız olarak bir CREATE VIEW veya ALTER VIEW deyiminde geçerlidir. Örneğin, CREATE VIEW deyimindeki SalesOrderID sütunda izinler verilirse, deyimi ALTER VIEW sütunu gibi farklı bir sütun adına sahip olarak SalesOrderIDadlandırabilir OrderRef ve yine de kullanarak SalesOrderIDgörünümle ilişkili izinlere sahip olabilir.

AS

Görünümün gerçekleştirmesi gereken eylemleri belirtir.

select_statement

Görünümü SELECT tanımlayan deyim. deyimi birden fazla tablo ve diğer görünümleri kullanabilir. Oluşturulan görünümün yan tümcesinde SELECT başvuruda bulunan nesneler arasından seçim yapmak için uygun izinler gereklidir.

Görünümün belirli bir tablonun satır ve sütunlarının bir alt kümesi olması gerekmez. Birden fazla tablo veya herhangi bir karmaşıklık yan tümcesine sahip diğer görünümleri kullanan bir SELECT görünüm oluşturulabilir.

Dizinli görünüm tanımında, deyiminin SELECT tek bir tablo deyimi veya isteğe bağlı toplamaya sahip bir çok tablolu JOIN olması gerekir.

SELECT Görünüm tanımındaki yan tümceler şunları içeremez:

  • Deyimin ORDER BY seçme listesinde TOP bir SELECT yan tümcesi olmadığı sürece yan tümce

    Important

    ORDER BY yan tümcesi yalnızca görünüm tanımında or TOP yan tümcesi tarafından OFFSET döndürülen satırları belirlemek için kullanılır. Yan ORDER BY tümcesi, sorgunun kendisinde de belirtilmediği sürece ORDER BY görünüm sorgulandığında sıralı sonuçları garanti etmez.

  • INTO anahtar sözcüğü

  • Yan OPTION tümcesi

  • Geçici bir tabloya veya tablo değişkenine başvuru.

select_statement deyimini kullandığındanSELECT, yan tümcesinde FROM belirtildiği gibi birleştirme ipuçlarını ve tablo ipuçlarını kullanmak geçerli olur. Daha fazla bilgi için bkz. FROM (Transact-SQL) ve SELECT (Transact-SQL).

İşlevler ve ile ayrılmış SELECT birden çok UNION deyim veya UNION ALLselect_statement kullanılabilir.

KONTROL SEÇENEĞI

Görünümde yürütülen tüm veri değişikliği deyimlerini select_statement içinde ayarlanan ölçütlere uymaya zorlar. Bir satır bir görünüm aracılığıyla değiştirildiğinde, WITH CHECK OPTION değişiklik işlendikten sonra verilerin görünümde görünür kalmasını sağlar.

Note

Yalnızca CHECK OPTION görünüm aracılığıyla yapılan güncelleştirmeler için geçerlidir. Doğrudan görünümün temel tablolarında gerçekleştirilen güncelleştirmelere uygulanabilirliği yoktur.

ENCRYPTION

için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri ile Azure SQL Veritabanı.

sys.syscomments dosyasındaki deyim metnini CREATE VIEW içeren girişleri şifreler. kullanmak WITH ENCRYPTION , görünümün SQL Server çoğaltmasının bir parçası olarak yayımlanmasını engeller.

SCHEMABINDING

Görünümü, temel alınan tablo veya tabloların şemasına bağlar. Belirtildiğinde SCHEMABINDING , temel tablo veya tablolar görünüm tanımını etkileyecek şekilde değiştirilemez. Değiştirilecek tablodaki bağımlılıkları kaldırmak için önce görünüm tanımının değiştirilmesi veya bırakılması gerekir. kullandığınızdaSCHEMABINDING, select_statement iki parçalı adları (şema) içermelidir.nesne) başvuruda olunan tablo, görünüm veya kullanıcı tanımlı işlevler. Başvuruda bulunılan tüm nesneler aynı veritabanında olmalıdır.

SCHEMABINDING yan tümcesiyle oluşturulan bir görünüme katılan görünümler veya tablolar, artık şema bağlaması olmayacak şekilde bırakılmadığı veya değiştirilmediği sürece bırakılamaz. Aksi takdirde, Veritabanı Altyapısı bir hata oluşturur. Ayrıca, şema bağlaması olan görünümlere katılan tablolarda deyimlerin yürütülmesi ALTER TABLE , bu deyimler görünüm tanımını etkilediğinde başarısız olur.

VIEW_METADATA

Görünüme başvuran bir sorgu için göz atma modu meta verileri istendiğinde SQL Server örneğinin DB Kitaplığı, ODBC ve OLE DB API'lerine temel tablo veya tablolar yerine görünümle ilgili meta veri bilgilerini döndüreceğini belirtir. Gözatma modu meta verileri, SQL Server örneğinin bu istemci tarafı API'lerine döndürdüğü ek meta verilerdir. Bu meta veriler, istemci tarafı API'lerinin güncelleştirilebilir istemci tarafı imleçler uygulamasına olanak tanır. Gözatma modu meta verileri, sonuç kümesindeki sütunların ait olduğu temel tablo hakkında bilgiler içerir.

ile VIEW_METADATAoluşturulan görünümler için göz atma modu meta verileri, sonuç kümesindeki görünümdeki sütunları açıklarken temel tablo adlarını değil, görünüm adını döndürür.

Bir görünüm kullanılarak WITH VIEW_METADATAoluşturulduğunda, görünümde veya tetiklendiğinde zaman damgası sütunu dışındaki tüm sütunları güncelleştirilebilir INSTEAD OF INSERTINSTEAD OF UPDATE . Güncelleştirilebilir görünümler hakkında daha fazla bilgi için bkz. Açıklamalar.

Remarks

Görünüm yalnızca geçerli veritabanında oluşturulabilir. sorgu CREATE VIEW toplu işlemindeki ilk deyim olmalıdır. Bir görünümde en fazla 1.024 sütun olabilir.

Bir görünümde sorgu yaparken, Veritabanı Altyapısı deyiminin herhangi bir yerinde başvuruda bulunup bulunmadığını ve bunların deyimi bağlamında geçerli olduğundan ve veri değiştirme deyimlerinin veri bütünlüğü kurallarını ihlal etmediğinden emin olmak için denetler. Başarısız olan bir denetim hata iletisi döndürür. Başarılı bir denetim, eylemi temel alınan tablo veya tablolara karşı bir eyleme çevirir.

Görünüm bırakılan bir tabloya veya görünüme bağlıysa, herkes görünümü kullanmaya çalıştığında Veritabanı Altyapısı bir hata iletisi oluşturur. Yeni bir tablo veya görünüm oluşturulursa ve tablo yapısı, bırakılan tablo yerine önceki temel tablodan değişmezse, görünüm yeniden kullanılabilir hale gelir. Yeni tablo veya görünüm yapısı değişirse görünümün bırakılması ve yeniden oluşturulması gerekir.

Yan tümcesiyle bir görünüm oluşturulmazsa, görünümün SCHEMABINDING tanımını etkileyen görünümde değişiklikler yapıldığında sp_refreshview çalıştırın. Aksi takdirde, sorgulandığında görünüm beklenmeyen sonuçlara neden olabilir.

Görünüm oluşturulduğunda, görünüm hakkındaki bilgiler şu katalog görünümlerinde depolanır: sys.views, sys.columns ve sys.sql_expression_dependencies. deyiminin CREATE VIEW metni sys.sql_modules katalog görünümünde depolanır.

Sayısal veya kayan ifadelerle tanımlanan bir görünümde dizin kullanan sorgunun sonucu, görünümde dizini kullanmayan benzer bir sorgudan farklı olabilir. Bu fark, , INSERTveya eylemleri sırasındaki DELETEyuvarlama hatalarına veya UPDATE temel tablolardaki eylemlere neden olabilir.

Veritabanı Altyapısı, bir görünüm oluşturulduğunda ve SET QUOTED_IDENTIFIER ayarlarını SET ANSI_NULLS kaydeder. Bu özgün ayarlar, görünüm kullanıldığında görünümü ayrıştırmak için kullanılır. Bu nedenle, ve için SET QUOTED_IDENTIFIERSET ANSI_NULLS tüm istemci oturumu ayarları görünüme erişildiğinde görünüm tanımını etkilemez.

Azure Synapse Analytics'te görünümler şema bağlamayı desteklemez. Bu nedenle, temel alınan nesnelerde değişiklik yapılırsa, temel meta verileri yenilemek için görünümü bırakmanız ve yeniden oluşturmanız gerekir. Daha fazla bilgi için bkz. Azure Synapse Analytics'te ayrılmış SQL havuzu ve sunucusuz SQL havuzu ile T-SQL görünümleri.

Azure Synapse Analytics'te güncelleştirilebilir görünümler, DML tetikleyicileri (veya AFTERtüründeINSTEAD OF) ve bölümlenmiş görünümler desteklenmez. Daha fazla bilgi için bkz. Azure Synapse Analytics'te ayrılmış SQL havuzu ve sunucusuz SQL havuzu ile T-SQL görünümleri.

Azure Synapse Analytics'te bölümlenmiş görünümler desteklenmez. Daha fazla bilgi için bkz. Azure Synapse Analytics'te ayrılmış SQL havuzu ve sunucusuz SQL havuzu ile T-SQL görünümleri.

Fabric SQL veritabanında görünümler oluşturulabilir, ancak Bunlar Fabric OneLake'e yansıtılmaz. Daha fazla bilgi için bkz.Doku SQL veritabanı yansıtma sınırlamaları .

Güncellenebilir görünümler

Aşağıdaki koşullar doğru olduğu sürece, temel alınan temel tablonun verilerini bir görünüm aracılığıyla değiştirebilirsiniz:

  • , UPDATEve INSERT deyimleri de dahil olmak üzere DELETEtüm değişiklikler yalnızca bir temel tablodaki sütunlara başvurmalıdır.

  • Görünümde değiştirilen sütunlar, tablo sütunlarındaki temel verilere doğrudan başvurmalıdır. Sütunlar, aşağıdakiler gibi başka bir şekilde türetilemez:

    • Toplama işlevi: AVG, COUNT, SUM, , MIN, MAX, , GROUPING, STDEV, STDEVPVARve VARP.

    • Bir hesaplama. Sütun, diğer sütunları kullanan bir ifadeden hesaplanamaz. UNION, UNION ALL, CROSSJOIN, EXCEPT ve INTERSECT küme işleçleri kullanılarak oluşturulan sütunlar bir hesaplamaya eşit olur ve ayrıca güncelleştirilebilir değildir.

  • Değiştirilen sütunlar , GROUP BYveya HAVING yan tümcelerinden etkilenmezDISTINCT.

  • TOP, yan tümcesiyle birlikte görünümün WITH CHECK OPTION hiçbir yerde kullanılmaz.

Önceki kısıtlamalar, görünümün FROM yan tümcesindeki tüm alt sorgular için geçerlidir, tıpkı görünümün kendisi için geçerli olduğu gibi. Genel olarak, Veritabanı Altyapısının değişiklikleri görünüm tanımından tek bir temel tabloya kesin olarak izleyebilmelidir. Daha fazla bilgi için bkz . Görünüm Aracılığıyla Verileri Değiştirme.

Önceki kısıtlamalar verileri doğrudan bir görünüm aracılığıyla değiştirmenizi engelliyorsa aşağıdaki seçenekleri göz önünde bulundurun:

  • TETIKLEYICILER YERİNE

    INSTEAD OF tetikleyicileri, görünümü güncelleştirilebilir hale getirmek için bir görünümde oluşturulabilir. INSTEAD OF Tetikleyici, tetikleyicinin tanımlandığı veri değişikliği deyimi yerine yürütülür. Bu tetikleyici, kullanıcının veri değişikliği deyimini işlemek için gerçekleşmesi gereken eylem kümesini belirtmesine olanak tanır. Bu nedenle, belirli bir INSTEAD OF veri değişikliği deyimindeki (INSERT, veya UPDATE) bir görünüm için tetikleyici varsa, DELETEilgili görünüm bu deyim aracılığıyla güncelleştirilebilir. Tetikleyiciler hakkında INSTEAD OF daha fazla bilgi için bkz. DML Tetikleyicileri.

  • Bölünmüş görünümler

    Görünüm bölümlenmiş bir görünümse, belirli kısıtlamalara bağlı olarak görünüm güncelleştirilebilir. Gerektiğinde, Veritabanı Altyapısı yerel bölümlenmiş görünümleri, tüm katılan tabloların ve görünümün SQL Server'ın aynı örneğinde yer aldığı görünümler ve görünümdeki tablolardan en az birinin farklı veya uzak bir sunucuda bulunduğu görünümlerle dağıtılmış bölümlenmiş görünümler olarak ayırt eder.

Bölümlenmiş görünümler

Bölümlenmiş görünüm, üye tablolardan biri UNION ALL tarafından aynı şekilde yapılandırılmış olarak tanımlanan ancak aynı SQL Server örneğinde veya federasyon veritabanı sunucuları adı verilen sql Server sunucularının otonom örneklerinden oluşan bir grupta birden çok tablo olarak ayrı olarak depolanan bir görünümdür.

Note

Verileri bir sunucuya yerel olarak bölümlemenin tercih edilen yöntemi bölümlenmiş tablolardır. Daha fazla bilgi için bkz. bölümlenmiş tablolar ve dizinler .

Bir bölümleme düzeni tasarlarken, her bölüme ait olan verilerin net olması gerekir. Örneğin, tablonun verileri Customers üç sunucu konumunda üç üye tablosuna dağıtılır: Customers_33 üzerinde Server1, Customers_66 üzerinde Server2ve Customers_99 üzerinde Server3.

üzerinde Server1 bölümlenmiş bir görünüm aşağıdaki şekilde tanımlanır:

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

Genel olarak, aşağıdaki biçimdeyse görünümün bölümlenmiş bir görünüm olduğu söylenir:

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

Bölümlenmiş görünümler oluşturma koşulları

  1. Seçim list

    • Görünüm tanımının sütun listesinde üye tablolarındaki tüm sütunları seçin.

    • Her select list birinin aynı sıralı konumundaki sütunların harmanlamalar da dahil olmak üzere aynı türde olduğundan emin olun. Genellikle için olduğu UNIONgibi sütunların örtük olarak dönüştürülebilir türler olması yeterli değildir.

      Ayrıca, tüm seçme listelerinde aynı sıralı konumda en az bir sütun (örneğin <col>) görünmelidir. Üye tablolarında sırasıyla üzerinde <col>tanımlanan CHECK kısıtlamalarına T1, ..., Tn sahip olacak şekilde tanımlayınC1, ..., Cn.<col>

      Tabloda C1 tanımlanan kısıtlama T1 aşağıdaki biçimde olmalıdır:

      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 >  
      
    • Kısıtlamaların, belirtilen herhangi bir değerinin <col> en çok kısıtlamalardan C1, ..., Cn birini karşılayıp bir dizi kopuk veya örtüşmeyen aralık oluşturacak şekilde olması gerekir. Kopuk kısıtlamaların tanımlandığı sütun <col> bölümleme sütunu olarak adlandırılır. Bölümleme sütunu, temel alınan tablolarda farklı adlara sahip olabilir. Kısıtlamaların, bölümleme sütununun daha önce bahsedilen koşullarını karşılaması için etkin ve güvenilir bir durumda olması gerekir. Kısıtlamalar devre dışı bırakılırsa, seçeneğini CHECK CONSTRAINT *constraint_name*kullanarak ALTER TABLE ve bunları doğrulamak için seçeneğini kullanarak WITH CHECK kısıtlama denetimini yeniden etkinleştirin.

      Aşağıdaki örneklerde geçerli kısıtlama kümeleri gösterilmektedir:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
    • Aynı sütun, seçme listesinde birden çok kez kullanılamaz.

  2. Bölümleme sütunu

    • Bölümleme sütunu, tablonun BİRİnCİl ANAHTARI'nın bir parçasıdır.

    • Hesaplanan, kimlik, varsayılan veya zaman damgası sütunu olamaz.

    • Üye tablosunda aynı sütunda birden fazla kısıtlama varsa, Veritabanı Altyapısı tüm kısıtlamaları yoksayar ve görünümün bölümlenmiş bir görünüm olup olmadığını belirlerken bunları dikkate almaz. Bölümlenmiş görünümün koşullarını karşılamak için bölümleme sütununda yalnızca bir bölümleme kısıtlaması olduğundan emin olun.

    • Bölümleme sütununun güncelleştirilebilirliği konusunda herhangi bir kısıtlama yoktur.

  3. Üye tabloları veya temel alınan tablolar T1, ..., Tn

    • Tablolar, dört bölümlü bir ad veya OPENDATASOURCE veya OPENROWSET tabanlı bir ad aracılığıyla başvuruda bulunan SQL Server çalıştıran diğer bilgisayarlardan yerel tablolar veya tablolar olabilir. OPENDATASOURCE ve OPENROWSET söz dizimi bir tablo adı belirtebilir, ancak doğrudan sorgu belirtemez. Daha fazla bilgi için bkz. OPENDATASOURCE (Transact-SQL) ve OPENROWSET (Transact-SQL).

      Üye tablolardan biri veya daha fazlası uzaksa, görünüm dağıtılmış bölümlenmiş görünüm olarak adlandırılır ve ek koşullar uygulanır. Bunlar bu bölümün ilerleyen bölümlerinde açıklanmıştır.

    • Deyimiyle UNION ALL birleştirilen tablo kümesinde aynı tablo iki kez görünemez.

    • Üye tabloların tablodaki hesaplanan sütunlarda oluşturulmuş dizinleri olamaz.

    • Üye tabloların tüm BİRİnCİl ANAHTAR kısıtlamaları aynı sayıda sütunda bulunur.

    • Görünümdeki tüm üye tabloları aynı ANSI doldurma ayarına sahiptir. Bu, içindeki kullanıcı seçenekleri seçeneği sp_configure veya SET deyimi kullanılarak ayarlanabilir.

Bölümlenmiş görünümlerdeki verileri değiştirme koşulları

Bölümlenmiş görünümlerdeki verileri değiştiren deyimler için aşağıdaki kısıtlamalar geçerlidir:

  • deyimi INSERT , temel alınan üye tabloların bu sütunlar için bir DEFAULT kısıtlaması olsa veya değerlere izin verseler bile görünümdeki tüm sütunlar için NULL değerler sağlar. Tanımları olan DEFAULT bu üye tablo sütunları için deyimleri açıkça anahtar sözcüğünü DEFAULTkullanamaz.

  • Bölümleme sütununa eklenen değer, temel alınan kısıtlamalardan en az birini karşılar; aksi takdirde, ekleme eylemi kısıtlama ihlaliyle başarısız olur.

  • UPDATE deyimleri, sütunun DEFAULT ilgili üye tablosunda tanımlanmış bir değeri SET olsa bile, anahtar sözcüğü yan tümcesinde bir DEFAULT değer olarak belirtemez.

  • Görünümdeki bir veya daha fazla üye tablodaki bir kimlik sütunu olan sütunlar veya INSERT deyimi kullanılarak UPDATE değiştirilemez.

  • Üye tablolarından biri zaman damgası sütunu içeriyorsa, veriler veya INSERTUPDATE deyimi kullanılarak değiştirilemez.

  • Üye tablolarından biri tetikleyici veya ON UPDATE CASCADE/SET NULL/SET DEFAULT veya ON DELETE CASCADE/SET NULL/SET DEFAULT kısıtlama içeriyorsa, görünüm değiştirilemez.

  • INSERT, UPDATEve DELETE bölümlenmiş bir görünüme karşı eylemlere, aynı görünümde veya deyimindeki üye tablolarından herhangi biriyle bir kendi kendine birleşim varsa izin verilmez.

  • Verileri bölümlenmiş bir görünüme toplu içeri aktarma, veya bcp ve BULK INSERT deyimleri tarafından INSERT ... SELECT * FROM OPENROWSET(BULK...) desteklenmez. Ancak , INSERT deyimini kullanarak bölümlenmiş görünüme birden çok satır ekleyebilirsiniz.

    Note

    Bölümlenmiş görünümü güncelleştirmek için kullanıcının üye tablolarında , INSERTve UPDATE izinleri olmalıdırDELETE.

Dağıtılmış bölümlenmiş görünümler için ek koşullar

Dağıtılmış bölümlenmiş görünümler için (bir veya daha fazla üye tablosu uzak olduğunda), aşağıdaki ek koşullar geçerlidir:

  • Güncelleştirmeden etkilenen tüm düğümlerde bölünmezliği garanti etmek için dağıtılmış bir işlem başlatılır.

  • XACT_ABORT SET, ONveya INSERT deyimlerinin çalışması için UPDATEseçeneğini DELETE olarak ayarlayın.

  • Smallmoney türünde uzak tablolarda bölümlenmiş görünümde başvuruda bulunan tüm sütunlar para olarak eşlenir. Bu nedenle, yerel tablolardaki karşılık gelen sütunlar da (seçme listesindeki aynı sıralı konumda) para türünde olmalıdır.

  • Veritabanı uyumluluk düzeyi 110 ve üzeri altında, bölümlenmiş bir görünümde başvuruda bulunan smalldatetime türünde uzak tablolardaki sütunlar smalldatetime olarak eşlenir. Yerel tablolardaki karşılık gelen sütunlar (seçme listesindeki aynı sıralı konumda) smalldatetime olmalıdır. Bu, bölümlenmiş görünümde başvurulan smalldatetime türündeki uzak tablolardaki sütunların datetime olarak eşlendiği ve yerel tablolardaki ilgili sütunların datetime türünde olması gerektiği SQL Server'ın önceki sürümlerindeki davranış değişikliğidir. Daha fazla bilgi için bkz. ALTER DATABASE Uyumluluk Düzeyi (Transact-SQL).

  • Bölümlenmiş görünümdeki herhangi bir bağlı sunucu geri döngü bağlantılı sunucu olamaz. Bu, aynı SQL Server örneğine işaret eden bağlı bir sunucudur.

Seçeneğin SET ROWCOUNT ayarı güncelleştirilebilir bölümlenmiş görünümler ve uzak tablolar içeren , INSERTve UPDATE eylemleri için DELETEyoksayılır.

Üye tabloları ve bölümlenmiş görünüm tanımı olduğunda, SQL Server sorgu iyileştiricisi üye tablolarındaki verilere erişmek için sorguları verimli bir şekilde kullanan akıllı planlar oluşturur. CHECK Kısıtlama tanımlarıyla, sorgu işlemcisi anahtar değerlerinin üye tabloları arasında dağılımını eşler. Kullanıcı sorguyu yayınladığında, sorgu işlemcisi eşlemeyi yan tümcesinde WHERE belirtilen değerlerle karşılaştırır ve üye sunucular arasında en az miktarda veri aktarımıyla bir yürütme planı oluşturur. Bu nedenle, bazı üye tabloları uzak sunucularda bulunuyorsa, SQL Server örneği dağıtılmış sorguları çözümler ve böylece aktarılması gereken dağıtılmış veri miktarının çok az olması gerekir.

Çoğaltmayla ilgili dikkat edilmesi gerekenler

Çoğaltmaya katılan üye tablolarında bölümlenmiş görünümler oluşturmak için aşağıdaki noktalar geçerlidir:

  • Aboneliklerin güncelleştirilmesiyle birleştirme çoğaltması veya işlem çoğaltmasında temel alınan tablolar varsa , uniqueidentifier sütununun da seçme listesine eklendiğinden emin olun.

    Bölümlenmiş görünümdeki tüm INSERT eylemler NEWID() sütunu için bir değer sağlamalıdır. DEFAULT anahtar sözcüğü kullanılamadığından , uniqueidentifier sütununa yönelik tüm UPDATE eylemleri değer olarak belirtilmelidir NEWID() .

  • Görünümü kullanarak yapılan güncelleştirmelerin çoğaltılması, tabloların iki farklı veritabanında çoğaltılmasıyla aynıdır: tablolar farklı çoğaltma aracıları tarafından sunulur ve güncelleştirmelerin sırası garanti edilmemektedir.

Permissions

Veritabanında CREATE VIEW izni ve görünümün oluşturulduğu şemada ALTER izni gerektirir.

Examples

Aşağıdaki örneklerde AdventureWorks2025 veya AdventureWorksDW2025 veritabanı kullanılır.

A. Görünüm oluşturmak için CREATE VIEW kullanma

Aşağıdaki örnek, deyimini kullanarak bir SELECT görünüm oluşturur. Basit bir görünüm, sütunların bir bileşimi sık sorgulandığında yararlıdır. Bu görünümden elde edilen veriler AdventureWorks2025 veritabanının ve Person.Person tablolarından alınmıştırHumanResources.Employee. Veriler Adventure Works Cycles çalışanları için ad ve işe alma tarihi bilgileri sağlar. Görünüm, iş yıldönümlerini izlemekten sorumlu olan kişi için oluşturulabilir, ancak bu kişiye bu tablolardaki tüm verilere erişim izni verilmeden.

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. ŞIFRELEME ILE kullanma

Aşağıdaki örnekte seçeneği kullanılır WITH ENCRYPTION ve hesaplanan sütunlar, yeniden adlandırılmış sütunlar ve birden çok sütun gösterilir.

Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri ve SQL Veritabanı.

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. ONAY SEÇENİYLE KULLAN

Aşağıdaki örnekte, beş tabloya başvuran ve veri değişikliklerinin yalnızca Seattle'da yaşayan çalışanlara uygulanmasına olanak tanıyan adlı dbo.SeattleOnly bir görünüm gösterilmektedir.

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. Görünümde yerleşik işlevleri kullanma

Aşağıdaki örnekte yerleşik işlev içeren bir görünüm tanımı gösterilmektedir. İşlevleri kullandığınızda, türetilmiş sütun için bir sütun adı belirtmeniz gerekir.

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. Bölümlenmiş verileri kullanma

Aşağıdaki örnekte , , SUPPLY1SUPPLY2ve SUPPLY3adlı SUPPLY4tablolar kullanılır. Bu tablolar, farklı bölgelerde bulunan dört ofisteki tedarikçi tablolarına karşılık gelir.

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

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

F. İki tabloyu birleştirerek görünüm oluşturma

Aşağıdaki örnek, ile bir deyimi kullanarak bir SELECTOUTER JOINgörünüm oluşturur. Birleştirme sorgusunun sonuçları görünümü doldurur.

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);